diff --git a/.vs/launch.vs.json b/.vs/launch.vs.json index 0650cbff3b..f7af0801bd 100644 --- a/.vs/launch.vs.json +++ b/.vs/launch.vs.json @@ -82,6 +82,13 @@ "projectTarget" : "memory_dump_tool.exe (bin\\memory_dump_tool.exe)", "name" : "Run - EE Memory Analyze", "args" : [ "${workspaceRoot}/eeMemory.bin", "${workspaceRoot}"] + }, + { + "type" : "default", + "project" : "CMakeLists.txt", + "projectTarget" : "dgo_unpacker.exe (bin\\dgo_unpacker.exe)", + "name" : "Run - DGO Unpacker (test)", + "args" : [ "C:\\GameData\\Jak1\\Backup\\DGO-PAL\\GAME", "C:\\GameData\\Jak1\\Backup\\DISC-PAL\\CGO\\GAME.CGO"] } ] } diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index fde51701b3..0bbadfea8f 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,5 +1,6 @@ add_library(common SHARED + audio/audio_formats.cpp cross_os_debug/xdbg.cpp cross_sockets/xsocket.cpp goos/Interpreter.cpp @@ -9,9 +10,11 @@ add_library(common goos/Reader.cpp goos/TextDB.cpp goos/ReplUtils.cpp + math/geometry.cpp log/log.cpp type_system/defenum.cpp type_system/deftype.cpp + type_system/state.cpp type_system/Type.cpp type_system/TypeFieldLookup.cpp type_system/TypeSpec.cpp diff --git a/common/audio/audio_formats.cpp b/common/audio/audio_formats.cpp new file mode 100644 index 0000000000..231c69079d --- /dev/null +++ b/common/audio/audio_formats.cpp @@ -0,0 +1,300 @@ +#include "audio_formats.h" +#include "common/util/BinaryWriter.h" +#include "third-party/fmt/core.h" + +/*! + * Write a wave file from a vector of samples. + */ +void write_wave_file_mono(const std::vector& samples, + s32 sample_rate, + const std::string& name) { + WaveFileHeader header; + memcpy(header.chunk_id, "RIFF", 4); + header.chunk_size = 36 + samples.size() * sizeof(s16); + memcpy(header.format, "WAVE", 4); + + // now the format + memcpy(header.subchunk1_id, "fmt ", 4); + header.subchunk1_size = 16; + header.aud_format = 1; + header.num_channels = 1; // mono + header.sample_rate = sample_rate; + header.byte_rate = sample_rate * header.num_channels * sizeof(s16); + header.block_align = header.num_channels * sizeof(s16); + header.bits_per_sample = 16; + + memcpy(header.subchunk2_id, "data", 4); + header.subchunk2_size = samples.size() * sizeof(s16); + + BinaryWriter writer; + writer.add(header); + + for (auto& samp : samples) { + writer.add(samp); + } + + writer.write_to_file(name); +} + +std::vector decode_adpcm(BinaryReader& reader) { + std::vector decoded_samples; + s32 sample_prev[2] = {0, 0}; + constexpr s32 f1[5] = {0, 60, 115, 98, 122}; + constexpr s32 f2[5] = {0, 0, -52, -55, -60}; + + int block_idx = 0; + while (true) { + if (!reader.bytes_left()) { + break; + } + u8 shift_filter = reader.read(); + u8 flags = reader.read(); + u8 shift = shift_filter & 0b1111; + u8 filter = shift_filter >> 4; + + if (shift > 12) { + assert(false); + } + + if (filter > 4) { + assert(false); + } + + if (flags == 7) { + break; + } + + u8 input_buffer[14]; + + for (int i = 0; i < 14; i++) { + input_buffer[i] = reader.read(); + } + + for (int i = 0; i < 28; i++) { + int16_t nibble = input_buffer[i / 2]; + if (i % 2 == 0) { + nibble = (nibble & 0x0f); + } else { + nibble = (nibble & 0xf0) >> 4; + } + + s32 sample = (s32)(s16)(nibble << 12); + sample >>= shift; + sample += (sample_prev[0] * f1[filter] + sample_prev[1] * f2[filter] + 32) / 64; + + if (sample > 0x7fff) { + sample = 0x7fff; + } + + if (sample < -0x8000) { + sample = -0x8000; + } + + sample_prev[1] = sample_prev[0]; + sample_prev[0] = sample; + + decoded_samples.push_back(sample); + } + block_idx++; + } + + return decoded_samples; +} + +// I attempted to write an encoder below, which works, but has some limitations. +// - In some cases we can't recover the original data exactly because the decode saturates the +// the output to fit in a signed 16-bit integer. +// - There are some cases when there are multiple ways to encode the same data. +// The break_filter_ties function attempts to handle this, but doesn't work 100% of the time. + +template +T saturate(T in, T minimum, T maximum) { + if (in < minimum) { + return minimum; + } + if (in > maximum) { + return maximum; + } + return in; +} + +constexpr int SAMPLES_PER_BLOCK = 28; + +void encode_block_with_filter(int filter_idx, + const s16* samples_in, + s32* out, + const s32* prev_samples_in) { + constexpr s32 f1[5] = {0, 60, 115, 98, 122}; + constexpr s32 f2[5] = {0, 0, -52, -55, -60}; + s32 prev_samples[2] = {prev_samples_in[0], prev_samples_in[1]}; + + for (int sample_idx = 0; sample_idx < SAMPLES_PER_BLOCK; sample_idx++) { + s32 sample = samples_in[sample_idx]; + s32 delta = + sample - (prev_samples[0] * f1[filter_idx] + prev_samples[1] * f2[filter_idx] + 32) / 64; + out[sample_idx] = delta; + prev_samples[1] = prev_samples[0]; + prev_samples[0] = sample; + } +} + +int get_shift_error(int shift, const s32* samples, bool /*debug*/) { + int result = 0; + + for (int sample_idx = 0; sample_idx < SAMPLES_PER_BLOCK; sample_idx++) { + int left_shift = 32 - (12 + 4 - shift); + assert(left_shift >= 0); + s32 sample_left = samples[sample_idx] << left_shift; + s32 sample_right = sample_left >> (32 - 4); + s32 sample_compressed = sample_right << (12 - shift); + + s32 err = std::abs(sample_compressed - samples[sample_idx]); + + result += err; + } + return result; +} + +int get_max_bits(s32 value) { + int result = 0; + if (value >= 0) { + int last = 1; + while (value) { + result++; + last = value & 1; + value >>= 1; + } + if (last) { + result++; + } + } else { + int last = 0; + while (value != -1) { + result++; + last = value & 1; + value >>= 1; + } + if (!last) { + result++; + } + } + return result; +} + +int break_filter_ties(s32* errors, s32* filter_shifts) { + s32 best_error = INT32_MAX; + + for (int filter_idx = 0; filter_idx < 5; filter_idx++) { + if (errors[filter_idx] < best_error) { + best_error = errors[filter_idx]; + } + } + + s32 best_shift = INT32_MAX; + int best_filter = -1; + for (int filter_idx = 5; filter_idx-- > 0;) { + if (errors[filter_idx] == best_error) { + if (filter_shifts[filter_idx] <= best_shift) { + best_shift = filter_shifts[filter_idx]; + best_filter = filter_idx; + } + } + } + + return best_filter; +} + +void test_encode_adpcm(const std::vector& samples, + const std::vector& filter_debug, + const std::vector& shift_debug) { + // the data is made of blocks. + // Each block decodes to 28 samples. + // each block has a shift and FIR filter. + // the window is continuous across blocks. + + // we could try all combinations of filters / shifts and pick the best, but that's slow and + // we don't know how to break ties if multiple are the same. + // we will try all 5 filters, then be smart about picking the best shift from there. + + // filter coefficients. + // there are 5x FIR filters that you can pick between. + + // last two samples from chosen encoding of the previous block + // init to 0, like the decoder + s32 prev_block_samples[2] = {0, 0}; + + // TODO - this will drop some samples at the end, if we don't use a multiple of 28. + // probably best to go back and pad with zeros or something. + int block_count = samples.size() / SAMPLES_PER_BLOCK; + + for (int block_idx = 0; block_idx < block_count; block_idx++) { + // try each filter + s32 pre_shift_samples_per_filter[5][SAMPLES_PER_BLOCK]; + for (int filter_idx = 0; filter_idx < 5; filter_idx++) { + encode_block_with_filter(filter_idx, samples.data() + SAMPLES_PER_BLOCK * block_idx, + pre_shift_samples_per_filter[filter_idx], prev_block_samples); + } + + // this is somewhat arbitrary, but we will require that the largest delta in the previous encode + // can be represented. + + s32 filter_errors[5] = {0, 0, 0, 0, 0}; + s32 filter_shifts[5] = {-1, -1, -1, -1}; + for (int filter_idx = 0; filter_idx < 5; filter_idx++) { + // find the largest value + s32 max_sample = INT32_MIN; + s32 min_sample = INT32_MAX; + + bool debug = block_idx == 10966 && filter_idx == 4; + + for (int sample_idx = 0; sample_idx < SAMPLES_PER_BLOCK; sample_idx++) { + s32 s = pre_shift_samples_per_filter[filter_idx][sample_idx]; + max_sample = std::max(s, max_sample); + min_sample = std::min(s, min_sample); + } + + if (debug) { + fmt::print("Range: {}\n", max_sample - min_sample); + } + + // see how many bits we need and pick shift. + auto bits_for_max = std::max(4, std::max(get_max_bits(min_sample), get_max_bits(max_sample))); + + filter_shifts[filter_idx] = 4 + 12 - bits_for_max; + + filter_errors[filter_idx] = get_shift_error(filter_shifts[filter_idx], + pre_shift_samples_per_filter[filter_idx], debug); + + if (filter_errors[filter_idx] == 0) { + while (filter_shifts[filter_idx] >= 0) { + int next_error = get_shift_error(filter_shifts[filter_idx] - 1, + pre_shift_samples_per_filter[filter_idx], false); + if (next_error == 0) { + filter_shifts[filter_idx]--; + } else { + break; + } + } + } + } + + int best_filter = break_filter_ties(filter_errors, filter_shifts); + s32 best_shift = filter_shifts[best_filter]; + + if (filter_errors[best_filter] || best_filter != filter_debug[block_idx] || + best_shift != shift_debug[block_idx]) { + fmt::print("Block {} me {}, {} : answer {} {}: ERR {}\n", block_idx, best_filter, best_shift, + filter_debug[block_idx], shift_debug[block_idx], filter_errors[best_filter]); + fmt::print("filter errors:\n"); + for (int i = 0; i < 5; i++) { + fmt::print(" [{}] {} {}\n", i, filter_errors[i], filter_shifts[i]); + } + fmt::print("prev: {} {}\n", prev_block_samples[0], prev_block_samples[1]); + assert(false); + } + + prev_block_samples[0] = samples.at(block_idx * 28 + 27); + prev_block_samples[1] = samples.at(block_idx * 28 + 26); + + } // end loop over blocks +} diff --git a/common/audio/audio_formats.h b/common/audio/audio_formats.h new file mode 100644 index 0000000000..ea72c50f5e --- /dev/null +++ b/common/audio/audio_formats.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include + +#include "common/util/BinaryReader.h" +#include "common/common_types.h" + +// The header data for a simple wave file +struct WaveFileHeader { + // wave file header + char chunk_id[4]; + s32 chunk_size; + char format[4]; + + // format chunk + char subchunk1_id[4]; + s32 subchunk1_size; + s16 aud_format; + s16 num_channels; + s32 sample_rate; + s32 byte_rate; + s16 block_align; + s16 bits_per_sample; + + // data chunk + char subchunk2_id[4]; + s32 subchunk2_size; +}; + +void write_wave_file_mono(const std::vector& samples, + s32 sample_rate, + const std::string& name); + +std::vector decode_adpcm(BinaryReader& reader); + +std::vector encode_adpcm(const std::vector& samples); \ No newline at end of file diff --git a/common/goal_constants.h b/common/goal_constants.h index 974e291620..81f5a46fbe 100644 --- a/common/goal_constants.h +++ b/common/goal_constants.h @@ -1,8 +1,5 @@ #pragma once -#ifndef JAK_GOAL_CONSTANTS_H -#define JAK_GOAL_CONSTANTS_H - #include "common_types.h" constexpr s32 BINTEGER_OFFSET = 0; @@ -36,4 +33,7 @@ constexpr u64 EE_MAIN_MEM_MAP = 0x2123000000; // intentionally > 32-bit to // so this should be used only for debugging. constexpr bool EE_MEM_LOW_MAP = false; -#endif // JAK_GOAL_CONSTANTS_H +constexpr double METER_LENGTH = 4096.0; +constexpr double DEGREES_PER_ROT = 65536.0; +constexpr double DEGREES_LENGTH = DEGREES_PER_ROT / 360.0; +constexpr u64 TICKS_PER_SECOND = 300.0; diff --git a/common/goos/Interpreter.cpp b/common/goos/Interpreter.cpp index 990ff4fbaf..9a68cbc874 100644 --- a/common/goos/Interpreter.cpp +++ b/common/goos/Interpreter.cpp @@ -72,7 +72,9 @@ Interpreter::Interpreter() { {"string-ref", &Interpreter::eval_string_ref}, {"string-length", &Interpreter::eval_string_length}, {"string-append", &Interpreter::eval_string_append}, - {"ash", &Interpreter::eval_ash}}; + {"ash", &Interpreter::eval_ash}, + {"symbol->string", &Interpreter::eval_symbol_to_string}, + {"string->symbol", &Interpreter::eval_string_to_symbol}}; string_to_type = {{"empty-list", ObjectType::EMPTY_LIST}, {"integer", ObjectType::INTEGER}, @@ -90,6 +92,17 @@ Interpreter::Interpreter() { load_goos_library(); } +/*! + * Add a user defined special form. The given function will be called with unevaluated arguments. + * Lookup from these forms occurs after special/builtin, but before any env lookups. + */ +void Interpreter::register_form( + const std::string& name, + const std::function< + Object(const Object&, Arguments&, const std::shared_ptr&)>& form) { + m_custom_forms[name] = form; +} + Interpreter::~Interpreter() { // There are some circular references that prevent shared_ptrs from cleaning up if we // don't do this. @@ -191,6 +204,19 @@ bool Interpreter::get_global_variable_by_name(const std::string& name, Object* d return false; } +/*! + * Sets the variable to the value. Overwrites an existing value, or creates a new global. + */ +void Interpreter::set_global_variable_by_name(const std::string& name, const Object& value) { + auto sym = SymbolObject::make_new(reader.symbolTable, name).as_symbol(); + global_environment.as_env()->vars[sym] = value; +} + +void Interpreter::set_global_variable_to_symbol(const std::string& name, const std::string& value) { + auto sym = SymbolObject::make_new(reader.symbolTable, value); + set_global_variable_by_name(name, sym); +} + /*! * Get arguments being passed to a form. Don't evaluate them. There are two modes, "varargs" and * "not varargs". With varargs enabled, any number of unnamed and named arguments can be given. @@ -525,6 +551,13 @@ Object Interpreter::eval_pair(const Object& obj, const std::shared_ptrsecond))(obj, args, env); } + // try custom forms next + auto kv_u = m_custom_forms.find(head_sym->name); + if (kv_u != m_custom_forms.end()) { + Arguments args = get_args(obj, rest, make_varargs()); + return (kv_u->second)(obj, args, env); + } + // try macros next Object macro_obj; if (try_symbol_lookup(head, env, ¯o_obj) && macro_obj.is_macro()) { @@ -1586,10 +1619,24 @@ Object Interpreter::eval_ash(const Object& form, if (sa >= 0 && sa < 64) { return Object::make_integer(val << sa); } else if (sa > -64) { - return Object::make_integer(val >> sa); + return Object::make_integer(val >> -sa); } else { throw_eval_error(form, fmt::format("Shift amount {} is out of range", sa)); return EmptyListObject::make_new(); } } + +Object Interpreter::eval_symbol_to_string(const Object& form, + Arguments& args, + const std::shared_ptr&) { + vararg_check(form, args, {ObjectType::SYMBOL}, {}); + return StringObject::make_new(args.unnamed.at(0).as_symbol()->name); +} + +Object Interpreter::eval_string_to_symbol(const Object& form, + Arguments& args, + const std::shared_ptr&) { + vararg_check(form, args, {ObjectType::STRING}, {}); + return SymbolObject::make_new(reader.symbolTable, args.unnamed.at(0).as_string()->data); +} } // namespace goos diff --git a/common/goos/Interpreter.h b/common/goos/Interpreter.h index db82258017..ea5dfe298b 100644 --- a/common/goos/Interpreter.h +++ b/common/goos/Interpreter.h @@ -19,6 +19,8 @@ class Interpreter { void throw_eval_error(const Object& o, const std::string& err); Object eval_with_rewind(const Object& obj, const std::shared_ptr& env); bool get_global_variable_by_name(const std::string& name, Object* dest); + void set_global_variable_by_name(const std::string& name, const Object& value); + void set_global_variable_to_symbol(const std::string& name, const std::string& value); Object eval(Object obj, const std::shared_ptr& env); Object intern(const std::string& name); void disable_printfs(); @@ -36,6 +38,12 @@ class Interpreter { const std::shared_ptr& env); bool truthy(const Object& o); + void register_form( + const std::string& name, + const std::function< + Object(const Object&, Arguments&, const std::shared_ptr&)>& form); + void eval_args(Arguments* args, const std::shared_ptr& env); + Reader reader; Object global_environment; Object goal_env; @@ -59,7 +67,6 @@ class Interpreter { const std::unordered_map>>& named); Object eval_pair(const Object& o, const std::shared_ptr& env); - void eval_args(Arguments* args, const std::shared_ptr& env); ArgumentSpec parse_arg_spec(const Object& form, Object& rest); Object quasiquote_helper(const Object& form, const std::shared_ptr& env); @@ -198,6 +205,12 @@ class Interpreter { Object eval_ash(const Object& form, Arguments& args, const std::shared_ptr& env); + Object eval_symbol_to_string(const Object& form, + Arguments& args, + const std::shared_ptr& env); + Object eval_string_to_symbol(const Object& form, + Arguments& args, + const std::shared_ptr& env); // specials Object eval_define(const Object& form, @@ -239,6 +252,11 @@ class Interpreter { Arguments& args, const std::shared_ptr& env)> builtin_forms; + + std::unordered_map< + std::string, + std::function&)>> + m_custom_forms; std::unordered_map& names return true; } +namespace { +std::string escape_string(const std::string& in) { + std::string result; + result.reserve(in.size()); + + for (char c : in) { + if (c == '"') { + result.push_back('\\'); + result.push_back('"'); + } else { + result.push_back(c); + } + } + + return result; +} +} // namespace + +std::string StringObject::print() const { + return "\"" + escape_string(data) + "\""; +} + +std::string StringObject::inspect() const { + return "[string] \"" + escape_string(data) + "\"\n"; +} + } // namespace goos diff --git a/common/goos/Object.h b/common/goos/Object.h index dd39d5c204..518bdbbcb2 100644 --- a/common/goos/Object.h +++ b/common/goos/Object.h @@ -416,9 +416,8 @@ class StringObject : public HeapObject { return obj; } - std::string print() const override { return "\"" + data + "\""; } - - std::string inspect() const override { return "[string] \"" + data + "\"\n"; } + std::string print() const override; + std::string inspect() const override; ~StringObject() override = default; }; diff --git a/common/goos/PrettyPrinter.cpp b/common/goos/PrettyPrinter.cpp index a753a87e3c..b7499ce82a 100644 --- a/common/goos/PrettyPrinter.cpp +++ b/common/goos/PrettyPrinter.cpp @@ -444,6 +444,31 @@ PrettyPrinterNode* getNextListOrEmptyListOnLine(PrettyPrinterNode* start) { return nullptr; } +PrettyPrinterNode* get_case_start_case(PrettyPrinterNode* start) { + auto node = start->next; + while (node) { + switch (node->tok->kind) { + case FormToken::TokenKind::OPEN_PAREN: + goto loop_end; + break; + case FormToken::TokenKind::WHITESPACE: + break; + default: + return getNextListOnLine(start); + } + node = node->next; + } +loop_end: + node = node->paren; + while (node && (!node->tok || node->tok->kind != FormToken::TokenKind::OPEN_PAREN)) { + node = node->next; + } + if (!node) { + return getNextListOnLine(start); + } + return node; +} + /*! * Get the first open paren on the current line (can start in the middle of line, inclusive of * start) nullptr if there's no open parens on the rest of this line @@ -678,8 +703,15 @@ void insertSpecialBreaks(NodePool& pool, PrettyPrinterNode* node) { } } - if (name == "cond") { - auto* start_of_case = getNextListOnLine(node); + if (name == "cond" || name == "case") { + PrettyPrinterNode* start_of_case; + if (name == "cond") { + start_of_case = getNextListOnLine(node); + } else { + start_of_case = get_case_start_case(node); + insertNewlineBefore(pool, start_of_case, 0); + } + while (true) { // let's break this case: assert(start_of_case->tok->kind == FormToken::TokenKind::OPEN_PAREN); @@ -708,7 +740,23 @@ void insertSpecialBreaks(NodePool& pool, PrettyPrinterNode* node) { } // break cond into a multi-line always - breakList(pool, node->paren); + if (name == "case") { + auto next = node->next; + if (next) { + next = next->next; + } + if (next->tok && next->tok->kind == FormToken::TokenKind::OPEN_PAREN) { + next = next->paren; + if (next) { + next = next->next; + } + } + if (next) { + // insertNewlineAfter(pool, next, 0); + } + } else { + breakList(pool, node->paren); + } } } } diff --git a/common/math/Vector.h b/common/math/Vector.h new file mode 100644 index 0000000000..28ea905409 --- /dev/null +++ b/common/math/Vector.h @@ -0,0 +1,149 @@ +#pragma once + +#include + +#include "third-party/fmt/core.h" + +namespace math { + +template +class Vector { + public: + Vector() = default; + static Vector zero() { + Vector result; + for (auto& x : result.m_data) { + x = T(0); + } + return result; + } + + template + Vector(Args... args) : m_data{T(args)...} {} + + T* begin() { return &m_data[0]; } + T* end() { return &m_data[Size]; } + const T* begin() const { return &m_data[0]; } + const T* end() const { return &m_data[Size]; } + + T& x() { return m_data[0]; } + + const T& x() const { return m_data[0]; } + + T& y() { + static_assert(Size >= 1, "Out of bounds"); + return m_data[1]; + } + + const T& y() const { + static_assert(Size >= 1, "Out of bounds"); + return m_data[1]; + } + + T& z() { + static_assert(Size >= 2, "Out of bounds"); + return m_data[2]; + } + + const T& z() const { + static_assert(Size >= 2, "Out of bounds"); + return m_data[2]; + } + + T& w() { + static_assert(Size >= 3, "Out of bounds"); + return m_data[3]; + } + + const T& w() const { + static_assert(Size >= 3, "Out of bounds"); + return m_data[3]; + } + + const T squared_length() const { + T sum = T(0); + for (auto val : m_data) { + sum += val * val; + } + return sum; + } + + const T length() const { return std::sqrt(squared_length()); } + + Vector operator+(const Vector& other) const { + Vector result; + for (int i = 0; i < Size; i++) { + result[i] = m_data[i] + other[i]; + } + return result; + } + + Vector operator-(const Vector& other) const { + Vector result; + for (int i = 0; i < Size; i++) { + result[i] = m_data[i] - other[i]; + } + return result; + } + + T dot(const Vector& other) const { + T result(0); + for (int i = 0; i < Size; i++) { + result += m_data[i] * other[i]; + } + return result; + } + + T operator[](int idx) const { return m_data[idx]; } + + T& operator[](int idx) { return m_data[idx]; } + + Vector operator/(const T& val) const { + Vector result; + for (int i = 0; i < Size; i++) { + result[i] = m_data[i] / val; + } + return result; + } + + Vector operator*(const T& val) const { + Vector result; + for (int i = 0; i < Size; i++) { + result[i] = m_data[i] * val; + } + return result; + } + + Vector normalized(const T& norm = T(1)) const { return (*this) * (norm / length()); } + + void normalize(const T& norm = T(1)) { *this = normalized(norm); } + + std::string to_string_aligned() const { + std::string result = "["; + for (auto x : m_data) { + result.append(fmt::format("{: 6.3f} ", x)); + } + result.pop_back(); + return result + "]"; + } + + private: + T m_data[Size]; +}; + +template +using Vector2 = Vector; + +template +using Vector3 = Vector; + +template +using Vector4 = Vector; + +using Vector2f = Vector2; +using Vector3f = Vector3; +using Vector4f = Vector4; +using Vector2d = Vector2; +using Vector3d = Vector3; +using Vector4d = Vector4; +} // namespace math diff --git a/common/math/geometry.cpp b/common/math/geometry.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/common/math/geometry.h b/common/math/geometry.h new file mode 100644 index 0000000000..4c71592bf7 --- /dev/null +++ b/common/math/geometry.h @@ -0,0 +1,47 @@ +#pragma once + +#include "common/math/Vector.h" + +namespace math { + +template +T squared(const T& in) { + return in * in; +} + +template +struct RaySphereResult { + bool hit = false; + T u[2] = {0, 0}; +}; + +/*! + * Check if a line intersects a sphere. + */ +template +RaySphereResult ray_sphere_intersect(const Vector3& ray_origin, + const Vector3& ray_direction_in, + const Vector3& sphere_origin, + T sphere_radius) { + RaySphereResult result; + Vector3 ray_direction = ray_direction_in.normalized(); + + Vector3 oc = ray_origin - sphere_origin; + + T value_under_sqrt = + squared(ray_direction.dot(oc)) - (oc.squared_length() - squared(sphere_radius)); + + if (value_under_sqrt < 0) { + result.hit = false; + return result; + } + + T minus_b = -ray_direction.dot(oc); + result.hit = true; + T sqrt_val = std::sqrt(value_under_sqrt); + + result.u[0] = minus_b + sqrt_val; + result.u[1] = minus_b - sqrt_val; + return result; +} +} // namespace math \ No newline at end of file diff --git a/common/type_system/TypeFieldLookup.cpp b/common/type_system/TypeFieldLookup.cpp index 3985b8a662..18723f0ecf 100644 --- a/common/type_system/TypeFieldLookup.cpp +++ b/common/type_system/TypeFieldLookup.cpp @@ -231,6 +231,8 @@ void try_reverse_lookup_array_like(const FieldReverseLookupInput& input, * - get something inside an object (variable idx) * - get a constant idx reference object (we pick this over just getting the array for idx = 0) * - get something inside a constant idx reference object + * + * Note: for an inline array of basics, the offset should include the basic offset. */ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input, const TypeSystem& ts, @@ -264,7 +266,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input, FieldReverseLookupInput next_input; next_input.deref = input.deref; next_input.stride = 0; - next_input.offset = input.offset; + next_input.offset = input.offset; // includes the offset. next_input.base_type = di.result_type; try_reverse_lookup(next_input, ts, &var_idx_node, output, max_count); return; @@ -272,18 +274,17 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input, // constant lookup, or accessing within the first one // which element we are in - int elt_idx = input.offset / di.stride; - // how many bytes into the element we look + int elt_idx = (ts.lookup_type(di.result_type)->get_offset() + input.offset) / di.stride; + // how many bytes into the element we look (including offset) int offset_into_elt = input.offset - (elt_idx * di.stride); // the expected number of bytes into the element we would look to grab a ref to the elt. - int expected_offset_into_elt = ts.lookup_type(di.result_type)->get_offset(); ReverseLookupNode const_idx_node; const_idx_node.prev = parent; const_idx_node.token.kind = FieldReverseLookupOutput::Token::Kind::CONSTANT_IDX; const_idx_node.token.idx = elt_idx; - if (offset_into_elt == expected_offset_into_elt && !input.deref.has_value()) { + if (offset_into_elt == 0 && !input.deref.has_value() && !input.stride) { // just get an element (possibly zero, and we want to include the 0 if so) // for the degenerate inline-array case, it seems more likely that we get the zeroth object // rather than the array, so this goes before that case. @@ -295,7 +296,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input, } // can we just return the array? - if (expected_offset_into_elt == offset_into_elt && !input.deref.has_value() && elt_idx == 0) { + if (offset_into_elt == 0 && !input.deref.has_value() && elt_idx == 0 && !input.stride) { auto parent_vec = parent_to_vector(parent); if (!parent_vec.empty()) { output->results.emplace_back(false, input.base_type, parent_to_vector(parent)); @@ -311,8 +312,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input, FieldReverseLookupInput next_input; next_input.deref = input.deref; next_input.stride = input.stride; - // try_reverse_lookup expects "offset_into_field - boxed_offset" - next_input.offset = offset_into_elt - expected_offset_into_elt; + next_input.offset = offset_into_elt; next_input.base_type = di.result_type; try_reverse_lookup(next_input, ts, &const_idx_node, output, max_count); } diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 8ab18a34e2..4c06256052 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -965,6 +965,13 @@ void TypeSystem::add_builtin_types() { add_builtin_value_type("uinteger", "uint64", 8); add_builtin_value_type("uinteger", "uint128", 16, false, false, RegClass::INT_128); + // add special units types. + add_builtin_value_type("float", "meters", 4, false, false, RegClass::FLOAT) + ->set_runtime_type("float"); + add_builtin_value_type("float", "degrees", 4, false, false, RegClass::FLOAT) + ->set_runtime_type("float"); + add_builtin_value_type("uint64", "seconds", 8, false, false)->set_runtime_type("uint64"); + auto int_type = add_builtin_value_type("integer", "int", 8, false, true); int_type->disallow_in_runtime(); auto uint_type = add_builtin_value_type("uinteger", "uint", 8, false, false); @@ -1352,8 +1359,23 @@ bool TypeSystem::typecheck_and_throw(const TypeSpec& expected, /*! * Is actual of type expected? For base types. */ -bool TypeSystem::typecheck_base_types(const std::string& expected, +bool TypeSystem::typecheck_base_types(const std::string& input_expected, const std::string& actual) const { + std::string expected = input_expected; + + // the unit types aren't picky. + if (expected == "meters") { + expected = "float"; + } + + if (expected == "seconds") { + expected = "uint"; + } + + if (expected == "degrees") { + expected = "float"; + } + // just to make sure it exists. lookup_type_allow_partial_def(expected); diff --git a/common/type_system/state.cpp b/common/type_system/state.cpp new file mode 100644 index 0000000000..b601df7471 --- /dev/null +++ b/common/type_system/state.cpp @@ -0,0 +1,15 @@ +#include "state.h" + +/*! + * Convert a (state ...) to the function required to go. Must be state. + */ +TypeSpec state_to_go_function(const TypeSpec& state_type) { + assert(state_type.base_type() == "state"); + std::vector arg_types; + for (int i = 0; i < (int)state_type.arg_count() - 1; i++) { + arg_types.push_back(state_type.get_arg(i)); + } + + arg_types.push_back(TypeSpec("none")); // none for the return. + return TypeSpec("function", arg_types); +} \ No newline at end of file diff --git a/common/type_system/state.h b/common/type_system/state.h new file mode 100644 index 0000000000..1d1ebd5f7f --- /dev/null +++ b/common/type_system/state.h @@ -0,0 +1,9 @@ +#pragma once + +#include "common/type_system/TypeSpec.h" + +/*! + * This contains type system utilities related to state and process + */ + +TypeSpec state_to_go_function(const TypeSpec& state_type); diff --git a/common/util/BinaryReader.h b/common/util/BinaryReader.h index b548c3366f..d6d43b0aae 100644 --- a/common/util/BinaryReader.h +++ b/common/util/BinaryReader.h @@ -6,31 +6,35 @@ */ #include +#include #include "common/util/assert.h" +#include "common/common_types.h" #include class BinaryReader { public: - explicit BinaryReader(const std::vector& _buffer) : buffer(_buffer) {} + explicit BinaryReader(const std::vector& _buffer) : m_buffer(_buffer) {} template T read() { - assert(seek + sizeof(T) <= buffer.size()); - T& obj = *(T*)(buffer.data() + seek); - seek += sizeof(T); + assert(m_seek + sizeof(T) <= m_buffer.size()); + T obj; + memcpy(&obj, m_buffer.data() + m_seek, sizeof(T)); + m_seek += sizeof(T); return obj; } void ffwd(int amount) { - seek += amount; - assert(seek <= buffer.size()); + m_seek += amount; + assert(m_seek <= m_buffer.size()); } - uint32_t bytes_left() const { return buffer.size() - seek; } - uint8_t* here() { return buffer.data() + seek; } - uint32_t get_seek() const { return seek; } + uint32_t bytes_left() const { return m_buffer.size() - m_seek; } + uint8_t* here() { return m_buffer.data() + m_seek; } + uint32_t get_seek() const { return m_seek; } + void set_seek(u32 seek) { m_seek = seek; } private: - std::vector buffer; - uint32_t seek = 0; + std::vector m_buffer; + uint32_t m_seek = 0; }; diff --git a/common/util/DgoReader.cpp b/common/util/DgoReader.cpp index fe81cd88b6..2474eb1364 100644 --- a/common/util/DgoReader.cpp +++ b/common/util/DgoReader.cpp @@ -16,7 +16,17 @@ DgoReader::DgoReader(std::string file_name, const std::vector& data) // get all obj files... for (uint32_t i = 0; i < header.object_count; i++) { - auto obj_header = reader.read(); + ObjectHeader obj_header = reader.read(); + + if (reader.bytes_left() < obj_header.size && i == header.object_count - 1 && + obj_header.size - reader.bytes_left() <= 48) { + printf( + "Warning: final file %s in DGO %s has a size missing %d bytes. It will be adjusted from " + "%d to %d bytes.\n", + obj_header.name, header.name, obj_header.size - reader.bytes_left(), obj_header.size, + (int)reader.bytes_left()); + obj_header.size = reader.bytes_left(); + } assert(reader.bytes_left() >= obj_header.size); assert_string_empty_after(obj_header.name, 60); @@ -58,4 +68,4 @@ std::string DgoReader::description_as_json() const { } return j.dump(4); -} \ No newline at end of file +} diff --git a/common/util/FileUtil.cpp b/common/util/FileUtil.cpp index 5721b39a41..9a4e52e189 100644 --- a/common/util/FileUtil.cpp +++ b/common/util/FileUtil.cpp @@ -15,6 +15,7 @@ #include "BinaryWriter.h" #include "common/common_types.h" #include "third-party/svpng.h" +#include "third-party/fmt/core.h" #include "third-party/lzokay/lzokay.hpp" #ifdef _WIN32 @@ -119,6 +120,21 @@ void write_text_file(const std::string& file_name, const std::string& text) { } std::vector read_binary_file(const std::string& filename) { + // make sure file exists and isn't a directory + std::filesystem::path path(filename); + + auto status = std::filesystem::status(std::filesystem::path(filename)); + + if (!std::filesystem::exists(status)) { + throw std::runtime_error(fmt::format("File {} cannot be opened: does not exist.", filename)); + } + + if (status.type() != std::filesystem::file_type::regular && + status.type() != std::filesystem::file_type::symlink) { + throw std::runtime_error( + fmt::format("File {} cannot be opened: not a regular file or symlink.", filename)); + } + auto fp = fopen(filename.c_str(), "rb"); if (!fp) throw std::runtime_error("File " + filename + diff --git a/common/util/Range.h b/common/util/Range.h index f44f0555db..99f3018109 100644 --- a/common/util/Range.h +++ b/common/util/Range.h @@ -21,6 +21,8 @@ class Range { Range(const T& start, const T& end) : m_start(start), m_end(end) {} const T& first() const { return m_start; } const T& last() const { return m_end; } + T& first() { return m_start; } + T& last() { return m_end; } bool contains(T& val) const { return val >= m_start && val < m_end; } bool empty() const { return m_end <= m_start; } T size() const { return m_end - m_start; } diff --git a/decompiler/CMakeLists.txt b/decompiler/CMakeLists.txt index 4a9ed5f51e..abf5e3986b 100644 --- a/decompiler/CMakeLists.txt +++ b/decompiler/CMakeLists.txt @@ -18,6 +18,7 @@ add_library( data/dir_tpages.cpp data/game_count.cpp data/game_text.cpp + data/streamed_audio.cpp data/StrFileReader.cpp data/tpage.cpp diff --git a/decompiler/Disasm/InstructionParser.cpp b/decompiler/Disasm/InstructionParser.cpp index aa1db16f1a..7bf85de01c 100644 --- a/decompiler/Disasm/InstructionParser.cpp +++ b/decompiler/Disasm/InstructionParser.cpp @@ -1,6 +1,7 @@ #include "common/util/assert.h" #include #include +#include #include "common/common_types.h" #include "InstructionParser.h" @@ -46,14 +47,24 @@ InstructionParser::InstructionParser() { InstructionKind::MFLO1, InstructionKind::SYNCL, InstructionKind::PCPYUD, InstructionKind::PEXTUW, InstructionKind::POR, InstructionKind::VMOVE, InstructionKind::VSUB, InstructionKind::LQC2, InstructionKind::SQC2, - InstructionKind::MULAS, InstructionKind::MADDAS}) { + InstructionKind::MULAS, InstructionKind::MADDAS, InstructionKind::QMTC2, + InstructionKind::QMFC2, InstructionKind::VITOF0, InstructionKind::VFTOI0, + InstructionKind::PSLLW, InstructionKind::PSRAW}) { auto& info = gOpcodeInfo[int(i)]; if (info.defined) { m_opcode_name_lookup[info.name] = int(i); added++; } } - assert(added == int(m_opcode_name_lookup.size())); + + for (auto i : {InstructionKind::VMUL_BC}) { + auto& info = gOpcodeInfo[int(i)]; + if (info.defined) { + m_opcode_name_broadcast_lookup[info.name] = int(i); + added++; + } + } + assert(added == int(m_opcode_name_lookup.size()) + int(m_opcode_name_broadcast_lookup.size())); } namespace { @@ -89,6 +100,18 @@ std::string get_instr_name(std::string& instr) { } } auto name = instr.substr(0, i); + + // qmXc2.i should not grab the i. + if (name == "qmtc2.i") { + name = "qmtc2"; // strip .i + i -= 2; // leave the i for the next step. + } + + if (name == "qmfc2.i") { + name = "qmfc2"; // strip .i + i -= 2; // leave the i for the next step. + } + if (i == instr.length()) { instr.clear(); } else { @@ -220,14 +243,34 @@ Instruction InstructionParser::parse_single_instruction( std::string str, const std::vector& labels) { auto name = get_instr_name(str); + + std::optional op_idx; auto lookup = m_opcode_name_lookup.find(name); if (lookup == m_opcode_name_lookup.end()) { + // it might be a VU with broadcast. + if (!name.empty() && name.front() == 'v') { + char last_char = name.back(); + if (last_char == 'x' || last_char == 'y' || last_char == 'z' || last_char == 'w') { + str.insert(str.begin(), ' '); + str.insert(str.begin(), last_char); + name.pop_back(); + auto bc_lookup = m_opcode_name_broadcast_lookup.find(name); + if (bc_lookup != m_opcode_name_broadcast_lookup.end()) { + op_idx = bc_lookup->second; + } + } + } + } else { + op_idx = lookup->second; + } + + if (!op_idx) { throw std::runtime_error("InstructionParser cannot handle opcode " + name); } Instruction instr; - instr.kind = InstructionKind(lookup->second); - auto& info = gOpcodeInfo[lookup->second]; + instr.kind = InstructionKind(*op_idx); + auto& info = gOpcodeInfo[*op_idx]; for (u8 i = 0; i < info.step_count; i++) { auto& step = info.steps[i]; switch (step.decode) { @@ -333,7 +376,36 @@ Instruction InstructionParser::parse_single_instruction( break; } + case DecodeType::IL: { + auto thing = get_until_space(str); + if (thing == "i") { + instr.il = 1; + } else if (thing == "ni") { + instr.il = 0; + } else { + printf("Bad interlock specification. Got %s\n", thing.c_str()); + assert(false); + } + } break; + + case DecodeType::BC: { + auto thing = get_until_space(str); + if (thing == "x") { + instr.cop2_bc = 0; + } else if (thing == "y") { + instr.cop2_bc = 1; + } else if (thing == "z") { + instr.cop2_bc = 2; + } else if (thing == "w") { + instr.cop2_bc = 3; + } else { + printf("Bad broadcast. Got %s\n", thing.c_str()); + assert(false); + } + } break; + default: + printf("missing DecodeType: %d\n", (int)step.decode); assert(false); } } diff --git a/decompiler/Disasm/InstructionParser.h b/decompiler/Disasm/InstructionParser.h index 5bff880f10..6bbcaa4802 100644 --- a/decompiler/Disasm/InstructionParser.h +++ b/decompiler/Disasm/InstructionParser.h @@ -26,5 +26,6 @@ class InstructionParser { private: std::unordered_map m_opcode_name_lookup; + std::unordered_map m_opcode_name_broadcast_lookup; }; } // namespace decompiler \ No newline at end of file diff --git a/decompiler/Disasm/OpcodeInfo.cpp b/decompiler/Disasm/OpcodeInfo.cpp index 0e12baf2a1..de13ecadc6 100644 --- a/decompiler/Disasm/OpcodeInfo.cpp +++ b/decompiler/Disasm/OpcodeInfo.cpp @@ -253,16 +253,16 @@ void init_opcode_info() { .dst(FT::RD, DT::COP0); // Move to System Control Coprocessor def(IK::MFC0, "mfc0") .dst_gpr(FT::RT) - .src(FT::RD, DT::COP0); // Move from System Control Coprocessor - def(IK::MTDAB, "mtdab").src_gpr(FT::RT); // Move to Data Address Breakpoint Register - def(IK::MTDABM, "mtdabm").src_gpr(FT::RT); // Move to Data Address Breakpoint Mask Register - drd(def(IK::MFHI, "mfhi")); // Move from HI Register - drd(def(IK::MFLO, "mflo")); // Move from LO Register - def(IK::MTLO1, "mtlo1").src_gpr(FT::RS); // Move to LO1 Register - drd(def(IK::MFLO1, "mflo1")); // Move from LO1 Register - drd(def(IK::PMFHL_UW, "pmfhl.uw")); // Parallel Move From HI/LO Register - drd(def(IK::PMFHL_LW, "pmfhl.lw")); - drd(def(IK::PMFHL_LH, "pmfhl.lh")); + .src(FT::RD, DT::COP0); // Move from System Control Coprocessor + def(IK::MTDAB, "mtdab").src_gpr(FT::RT); // Move to Data Address Breakpoint Register + def(IK::MTDABM, "mtdabm").src_gpr(FT::RT); // Move to Data Address Breakpoint Mask Register + drd(def(IK::MFHI, "mfhi")); // Move from HI Register + drd(def(IK::MFLO, "mflo")); // Move from LO Register + def(IK::MTLO1, "mtlo1").src_gpr(FT::RS); // Move to LO1 Register + drd(def(IK::MFLO1, "mflo1")); // Move from LO1 Register + drd(def(IK::PMFHL_UW, "pmfhl.uw").gpr128()); // Parallel Move From HI/LO Register + drd(def(IK::PMFHL_LW, "pmfhl.lw").gpr128()); + drd(def(IK::PMFHL_LH, "pmfhl.lh").gpr128()); def(IK::MFPC, "mfpc").dst_gpr(FT::RT).src(FT::PCR, DT::PCR); // Move from Performance Counter def(IK::MTPC, "mtpc").src_gpr(FT::RT).dst(FT::PCR, DT::PCR); // Move to Performance Counter @@ -279,45 +279,48 @@ void init_opcode_info() { def(IK::ERET, "eret"); // Exception Return def(IK::EI, "ei"); // Enable Interrupt - drd_srs_srt(def(IK::PPACB, "ppacb")); // Parallel Pack to Byte - drd_srs_srt(def(IK::PPACH, "ppach")); // Parallel Pack to Halfword - drd_srs_srt(def(IK::PPACW, "ppacw")); // Parallel Pack to Word - drd_srs_srt(def(IK::PADDH, "paddh")); // Parallel Add Halfword - drd_srs_srt(def(IK::PADDW, "paddw")); // Parallel Add Word - drd_srs_srt(def(IK::PSUBW, "psubw")); // Parallel Subtract Word - drd_srs_srt(def(IK::PMINH, "pminh")); // Parallel Minimize Halfword - drd_srs_srt(def(IK::PMINW, "pminw")); // Parallel Minimize Word - drd_srs_srt(def(IK::PMAXH, "pmaxh")); // Parallel Maximize Halfword - drd_srs_srt(def(IK::PMAXW, "pmaxw")); // Parallel Maximize Word - drd_srs_srt(def(IK::PEXTLB, "pextlb")); // Parallel Extend Lower from Byte - drd_srs_srt(def(IK::PEXTLH, "pextlh")); // Parallel Extend Lower from Halfword - drd_srs_srt(def(IK::PEXTLW, "pextlw")); // Parallel Extend Lower from Word - drd_srs_srt(def(IK::PCGTW, "pcgtw")); // Parallel Compare for Greater Than Word - drd_srs_srt(def(IK::PCEQB, "pceqb")); // Parallel Compare for Equal Byte - drd_srs_srt(def(IK::PCEQW, "pceqw")); // Parallel Compare for Equal Word - drd_srs_srt(def(IK::PEXTUB, "pextub")); // Parallel Extend Upper from Byte - drd_srs_srt(def(IK::PEXTUH, "pextuh")); // Parallel Extend Upper from Halfword - drd_srs_srt(def(IK::PEXTUW, "pextuw")); // Parallel Extend Upper from Word - drd_srs_srt(def(IK::PCPYUD, "pcpyud")); // Parallel Copy Upper Doubleword - drd_srs_srt(def(IK::PCPYLD, "pcpyld")); // Parallel Copy Lower Doubleword - drd_srs_srt(def(IK::PMADDH, "pmaddh")); // Parallel Multiply-Add Halfword - drd_srs_srt(def(IK::PMULTH, "pmulth")); // Parallel Multiply Halfword - drd_srs_srt(def(IK::PEXEW, "pexew")); // Parallel Exchange Even Word - drd_srs_srt(def(IK::PINTEH, "pinteh")); // Parallel Interleave Even Halfword - drd_srs_srt(def(IK::PAND, "pand")); // Parallel And - drd_srs_srt(def(IK::POR, "por")); // Parallel Or - drd_srs_srt(def(IK::PNOR, "pnor")); // Parallel Not Or + drd_srs_srt(def(IK::PPACB, "ppacb").gpr128()); // Parallel Pack to Byte + drd_srs_srt(def(IK::PPACH, "ppach").gpr128()); // Parallel Pack to Halfword + drd_srs_srt(def(IK::PPACW, "ppacw").gpr128()); // Parallel Pack to Word + drd_srs_srt(def(IK::PADDH, "paddh").gpr128()); // Parallel Add Halfword + drd_srs_srt(def(IK::PADDW, "paddw").gpr128()); // Parallel Add Word + drd_srs_srt(def(IK::PSUBW, "psubw").gpr128()); // Parallel Subtract Word + drd_srs_srt(def(IK::PMINH, "pminh").gpr128()); // Parallel Minimize Halfword + drd_srs_srt(def(IK::PMINW, "pminw").gpr128()); // Parallel Minimize Word + drd_srs_srt(def(IK::PMAXH, "pmaxh").gpr128()); // Parallel Maximize Halfword + drd_srs_srt(def(IK::PMAXW, "pmaxw").gpr128()); // Parallel Maximize Word + drd_srs_srt(def(IK::PEXTLB, "pextlb").gpr128()); // Parallel Extend Lower from Byte + drd_srs_srt(def(IK::PEXTLH, "pextlh").gpr128()); // Parallel Extend Lower from Halfword + drd_srs_srt(def(IK::PEXTLW, "pextlw").gpr128()); // Parallel Extend Lower from Word + drd_srs_srt(def(IK::PCGTW, "pcgtw").gpr128()); // Parallel Compare for Greater Than Word + drd_srs_srt(def(IK::PCEQB, "pceqb").gpr128()); // Parallel Compare for Equal Byte + drd_srs_srt(def(IK::PCEQW, "pceqw").gpr128()); // Parallel Compare for Equal Word + drd_srs_srt(def(IK::PEXTUB, "pextub").gpr128()); // Parallel Extend Upper from Byte + drd_srs_srt(def(IK::PEXTUH, "pextuh").gpr128()); // Parallel Extend Upper from Halfword + drd_srs_srt(def(IK::PEXTUW, "pextuw").gpr128()); // Parallel Extend Upper from Word + drd_srs_srt(def(IK::PCPYUD, "pcpyud").gpr128()); // Parallel Copy Upper Doubleword + drd_srs_srt(def(IK::PCPYLD, "pcpyld").gpr128()); // Parallel Copy Lower Doubleword + drd_srs_srt(def(IK::PMADDH, "pmaddh").gpr128()); // Parallel Multiply-Add Halfword + drd_srs_srt(def(IK::PMULTH, "pmulth").gpr128()); // Parallel Multiply Halfword + drd_srs_srt(def(IK::PEXEW, "pexew").gpr128()); // Parallel Exchange Even Word + drd_srs_srt(def(IK::PINTEH, "pinteh").gpr128()); // Parallel Interleave Even Halfword + drd_srs_srt(def(IK::PAND, "pand").gpr128()); // Parallel And + drd_srs_srt(def(IK::POR, "por").gpr128()); // Parallel Or + drd_srs_srt(def(IK::PNOR, "pnor").gpr128()); // Parallel Not Or - drd_srt_ssa(def(IK::PSLLW, "psllw")); // Parallel Shift Left Logical Word - drd_srt_ssa(def(IK::PSLLH, "psllh")); // Parallel Shift Left Logical Halfword - drd_srt_ssa(def(IK::PSRAW, "psraw")); // Parallel Shift Right Arithmetic Word - drd_srt_ssa(def(IK::PSRAH, "psrah")); // Parallel Shift Right Arithmetic Halfword - drd_srt_ssa(def(IK::PSRLH, "psrlh")); // Parallel Shift Right Logical Halfword + drd_srt_ssa(def(IK::PSLLW, "psllw").gpr128()); // Parallel Shift Left Logical Word + drd_srt_ssa(def(IK::PSLLH, "psllh").gpr128()); // Parallel Shift Left Logical Halfword + drd_srt_ssa(def(IK::PSRAW, "psraw").gpr128()); // Parallel Shift Right Arithmetic Word + drd_srt_ssa(def(IK::PSRAH, "psrah").gpr128()); // Parallel Shift Right Arithmetic Halfword + drd_srt_ssa(def(IK::PSRLH, "psrlh").gpr128()); // Parallel Shift Right Logical Halfword - def(IK::PLZCW, "plzcw").dst_gpr(FT::RD).src_gpr(FT::RS); // Parallel Leading Zero Count Word - def(IK::PABSW, "pabsw").dst_gpr(FT::RD).src_gpr(FT::RT); // Parallel Absolute Word - def(IK::PROT3W, "prot3w").dst_gpr(FT::RD).src_gpr(FT::RT); // Parallel Rotate 3 Word - def(IK::PCPYH, "pcpyh").dst_gpr(FT::RD).src_gpr(FT::RT); // Parallel Copy Halfword + def(IK::PLZCW, "plzcw") + .dst_gpr(FT::RD) + .src_gpr(FT::RS) + .gpr128(); // Parallel Leading Zero Count Word + def(IK::PABSW, "pabsw").dst_gpr(FT::RD).src_gpr(FT::RT).gpr128(); // Parallel Absolute Word + def(IK::PROT3W, "prot3w").dst_gpr(FT::RD).src_gpr(FT::RT).gpr128(); // Parallel Rotate 3 Word + def(IK::PCPYH, "pcpyh").dst_gpr(FT::RD).src_gpr(FT::RT).gpr128(); // Parallel Copy Halfword // COP1 @@ -436,7 +439,7 @@ void init_opcode_info() { def(IK::VIADDI, "viaddi").dst_vi(FT::FT).src_vi(FT::FS).src(FT::IMM5, DT::IMM); def(IK::QMFC2, "qmfc2").src(FT::IL, DT::IL).dst_gpr(FT::RT).src_vf(FT::FS); - def(IK::QMTC2, "qmtc2").src(FT::IL, DT::IL).src_gpr(FT::RT).dst_vf(FT::FS); + def(IK::QMTC2, "qmtc2").src(FT::IL, DT::IL).dst_vf(FT::FS).src_gpr(FT::RT); def(IK::VSQRT, "vsqrt").dst(FT::ZERO, DT::VU_Q).src_vf(FT::FT).src(FT::FT_F, DT::VF_F); def(IK::VRXOR, "vrxor").src(FT::BC, DT::BC).src_vf(FT::FS); def(IK::VRNEXT, "vrnext").src(FT::DEST, DT::DEST).dst_vf(FT::FT); @@ -518,4 +521,9 @@ OpcodeInfo& OpcodeInfo::dst_vf(FieldType field) { OpcodeInfo& OpcodeInfo::dst_vi(FieldType field) { return dst(field, DT::VI); } + +OpcodeInfo& OpcodeInfo::gpr128() { + gpr_128 = true; + return *this; +} } // namespace decompiler diff --git a/decompiler/Disasm/OpcodeInfo.h b/decompiler/Disasm/OpcodeInfo.h index d941951506..407ef78dec 100644 --- a/decompiler/Disasm/OpcodeInfo.h +++ b/decompiler/Disasm/OpcodeInfo.h @@ -335,6 +335,7 @@ struct OpcodeInfo { bool is_store = false; bool is_load = false; bool has_delay_slot = false; + bool gpr_128 = false; // does it requires 128-bit registers? void step(DecodeStep& s); @@ -350,6 +351,8 @@ struct OpcodeInfo { OpcodeInfo& dst_vf(FieldType field); OpcodeInfo& dst_vi(FieldType field); + OpcodeInfo& gpr128(); + uint8_t step_count = 0; DecodeStep steps[MAX_DECODE_STEPS]; }; diff --git a/decompiler/Function/CfgVtx.cpp b/decompiler/Function/CfgVtx.cpp index 4c7b6d1542..e4d3ca1cfe 100644 --- a/decompiler/Function/CfgVtx.cpp +++ b/decompiler/Function/CfgVtx.cpp @@ -280,6 +280,7 @@ goos::Object UntilLoop_single::to_form() const { } int UntilLoop_single::get_first_block_id() const { + return block->get_first_block_id(); assert(false); return -1; } @@ -537,6 +538,10 @@ bool ControlFlowGraph::is_until_loop(CfgVtx* b1, CfgVtx* b2) { if (!b1 || !b2) return false; + if (b2->end_branch.asm_branch) { + return false; + } + // check next and prev if (b1->next != b2) return false; @@ -575,6 +580,10 @@ bool ControlFlowGraph::is_goto_not_end_and_unreachable(CfgVtx* b0, CfgVtx* b1) { return false; } + if (b0->end_branch.asm_branch || b1->end_branch.asm_branch) { + return false; + } + // b0 should be an always branch, not likely. if (!b0->end_branch.has_branch || !b0->end_branch.branch_always || b0->end_branch.branch_likely) { return false; @@ -785,7 +794,7 @@ bool ControlFlowGraph::find_until1_loop() { bool found = false; for_each_top_level_vtx([&](CfgVtx* vtx) { - if (vtx->succ_branch == vtx && vtx->succ_ft) { + if (vtx->succ_branch == vtx && vtx->succ_ft && !vtx->end_branch.asm_branch) { auto loop = alloc(); loop->block = vtx; loop->pred = vtx->pred; @@ -903,6 +912,9 @@ bool ControlFlowGraph::find_infinite_continue() { fmt::print("Considering {} as an infinite continue:\n", b0->to_string()); + if (b0->end_branch.asm_branch) { + return true; + } if (dest_block >= my_block) { fmt::print(" Rejecting because destination block {} comes after me {}\n", dest_block, my_block); @@ -1041,6 +1053,10 @@ bool ControlFlowGraph::is_sequence(CfgVtx* b0, CfgVtx* b1, bool allow_self_loops if (!b0 || !b1) return false; + // if (b0->end_branch.asm_branch || b1->end_branch.asm_branch) { + // return false; + // } + if (b0->next != b1) { return false; } diff --git a/decompiler/IR2/AtomicOp.cpp b/decompiler/IR2/AtomicOp.cpp index fbfb1b508b..a139a7fb6f 100644 --- a/decompiler/IR2/AtomicOp.cpp +++ b/decompiler/IR2/AtomicOp.cpp @@ -298,6 +298,8 @@ std::string get_simple_expression_op_name(SimpleExpression::Kind kind) { return "vector-!2"; case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: return "vector-float*!2"; + case SimpleExpression::Kind::VECTOR_CROSS: + return "veccross"; case SimpleExpression::Kind::SUBU_L32_S7: return "subu-s7"; case SimpleExpression::Kind::VECTOR_3_DOT: @@ -356,6 +358,7 @@ int get_simple_expression_arg_count(SimpleExpression::Kind kind) { case SimpleExpression::Kind::VECTOR_PLUS: case SimpleExpression::Kind::VECTOR_MINUS: case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: + case SimpleExpression::Kind::VECTOR_CROSS: return 3; case SimpleExpression::Kind::SUBU_L32_S7: return 1; diff --git a/decompiler/IR2/AtomicOp.h b/decompiler/IR2/AtomicOp.h index ff777be427..cd1303f199 100644 --- a/decompiler/IR2/AtomicOp.h +++ b/decompiler/IR2/AtomicOp.h @@ -226,6 +226,7 @@ class SimpleExpression { VECTOR_PLUS, VECTOR_MINUS, VECTOR_FLOAT_PRODUCT, + VECTOR_CROSS, SUBU_L32_S7, // use SUBU X, src0, s7 to check if lower 32-bits are s7. VECTOR_3_DOT, }; diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 4c7d073fbf..6c5c5ccd89 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -5,6 +5,7 @@ #include "decompiler/util/TP_Type.h" #include "decompiler/util/DecompilerTypeSystem.h" #include "decompiler/IR2/bitfields.h" +#include "common/type_system/state.h" namespace decompiler { @@ -81,6 +82,8 @@ TP_Type SimpleAtom::get_type(const TypeState& input, // which actually means that you get the first address in the symbol table. // it's not really a linked symbol, but the basic op builder represents it as one. return TP_Type::make_from_ts(TypeSpec("pointer")); + } else if (m_string == "enter-state") { + return TP_Type::make_enter_state(); } // look up the type of the symbol @@ -187,16 +190,17 @@ TP_Type SimpleExpression::get_type(const TypeState& input, case Kind::XOR: case Kind::LEFT_SHIFT: case Kind::MUL_UNSIGNED: + case Kind::PCPYLD: return get_type_int2(input, env, dts); case Kind::NEG: case Kind::LOGNOT: return get_type_int1(input, env, dts); case Kind::DIV_UNSIGNED: case Kind::MOD_UNSIGNED: - case Kind::PCPYLD: return TP_Type::make_from_ts("uint"); case Kind::VECTOR_PLUS: case Kind::VECTOR_MINUS: + case Kind::VECTOR_CROSS: return TP_Type::make_from_ts("vector"); case Kind::VECTOR_FLOAT_PRODUCT: return TP_Type::make_from_ts("vector"); @@ -257,7 +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) { + 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)); } } @@ -427,6 +432,21 @@ TP_Type SimpleExpression::get_type_int2(const TypeState& input, break; } + if (arg0_type.kind == TP_Type::Kind::PCPYUD_BITFIELD && + (m_kind == Kind::AND || m_kind == Kind::OR)) { + // anding a bitfield should return the bitfield type. + return TP_Type::make_from_pcpyud_bitfield(arg0_type.get_bitfield_type()); + } + + // this is right but breaks something else right now. + if (m_kind == Kind::PCPYLD && arg0_type.kind == TP_Type::Kind::PCPYUD_BITFIELD) { + return arg1_type; + } + + if (m_kind == Kind::PCPYLD) { + return TP_Type::make_from_ts("uint"); + } + if (arg0_type.kind == TP_Type::Kind::INTEGER_CONSTANT_PLUS_VAR_MULT && m_kind == Kind::ADD) { FieldReverseLookupInput rd_in; rd_in.offset = arg0_type.get_add_int_constant(); @@ -554,6 +574,14 @@ TP_Type SimpleExpression::get_type_int2(const TypeState& input, return TP_Type::make_from_ts(arg1_type.typespec()); } + if (m_kind == Kind::ADD && tc(dts, TypeSpec("structure"), arg0_type) && + arg1_type.is_integer_constant()) { + auto type_info = dts.ts.lookup_type(arg0_type.typespec()); + if ((u64)type_info->get_size_in_memory() == arg1_type.get_integer_constant()) { + return TP_Type::make_from_ts(arg0_type.typespec()); + } + } + if (tc(dts, TypeSpec("structure"), arg1_type) && !m_args[0].is_int() && is_int_or_uint(dts, arg0_type)) { if (arg1_type.typespec() == TypeSpec("symbol") && @@ -775,9 +803,18 @@ TypeState SetVarConditionOp::propagate_types_internal(const TypeState& input, TypeState StoreOp::propagate_types_internal(const TypeState& input, const Env& env, DecompilerTypeSystem& dts) { + TypeState output = input; + + // look for setting the next state of the current process + IR2_RegOffset ro; + if (get_as_reg_offset(m_addr, &ro)) { + if (ro.reg == Register(Reg::GPR, Reg::S6) && ro.offset == 72) { + output.next_state_type = m_value.get_type(input, env, dts); + } + } (void)env; (void)dts; - return input; + return output; } TP_Type LoadVarOp::get_src_type(const TypeState& input, @@ -1090,6 +1127,26 @@ TypeState CallOp::propagate_types_internal(const TypeState& input, throw std::runtime_error("Called something that was not a function: " + in_type.print()); } + // If we call enter-state, update our type. + if (in_tp.kind == TP_Type::Kind::ENTER_STATE_FUNCTION) { + // this is a GO! + auto state_type = input.next_state_type.typespec(); + if (state_type.base_type() != "state") { + throw std::runtime_error( + fmt::format("At op {}, called enter-state, but the current next-state has type {}, which " + "is not a valid state.", + m_my_idx, input.next_state_type.print())); + } + + if (state_type.arg_count() == 0) { + throw std::runtime_error(fmt::format( + "At op {}, tried to enter-state, but the type of (-> s6 next-state) is just a plain " + "state. The decompiler must know the specific state type.", + m_my_idx)); + } + in_type = state_to_go_function(state_type); + } + if (in_type.arg_count() < 1) { throw std::runtime_error("Called a function, but we do not know its type"); } @@ -1189,8 +1246,11 @@ void FunctionEndOp::mark_function_as_no_return_value() { } TypeState AsmBranchOp::propagate_types_internal(const TypeState& input, - const Env&, - DecompilerTypeSystem&) { + const Env& env, + DecompilerTypeSystem& dts) { + if (m_branch_delay) { + return m_branch_delay->propagate_types(input, env, dts); + } // for now, just make everything uint TypeState output = input; for (auto x : m_write_regs) { @@ -1198,6 +1258,7 @@ TypeState AsmBranchOp::propagate_types_internal(const TypeState& input, output.get(x) = TP_Type::make_from_ts("uint"); } } + return output; } @@ -1207,8 +1268,8 @@ TypeState StackSpillLoadOp::propagate_types_internal(const TypeState& input, // stack slot load auto info = env.stack_spills().lookup(m_offset); if (info.size != m_size) { - env.func->warnings.general_warning( - "Stack slot load mismatch: defined as size {}, got size {}\n", info.size, m_size); + env.func->warnings.general_warning("Stack slot load mismatch: defined as size {}, got size {}", + info.size, m_size); } if (info.is_signed != m_is_signed) { diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index ed587959fb..2db0a059a2 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -117,6 +117,10 @@ goos::Object Env::get_variable_name_with_cast(const RegisterAccess& access) cons } } +std::string Env::get_variable_name(const RegisterAccess& access) const { + return get_variable_and_cast(access).name; +} + VariableWithCast Env::get_variable_and_cast(const RegisterAccess& access) const { if (access.reg().get_kind() == Reg::FPR || access.reg().get_kind() == Reg::GPR) { auto& var_info = m_var_names.lookup(access.reg(), access.idx(), access.mode()); @@ -250,19 +254,6 @@ std::optional Env::get_user_cast_for_access(const RegisterAccess& acce return {}; } -std::string Env::get_variable_name(const RegisterAccess& access) const { - if (access.reg().get_kind() == Reg::FPR || access.reg().get_kind() == Reg::GPR) { - std::string lookup_name = m_var_names.lookup(access.reg(), access.idx(), access.mode()).name(); - auto remapped = m_var_remap.find(lookup_name); - if (remapped != m_var_remap.end()) { - lookup_name = remapped->second; - } - return lookup_name; - } else { - throw std::runtime_error("Cannot store a variable in this reg"); - } -} - /*! * Get the type of the variable currently in the register. * NOTE: this is _NOT_ the most specific type known to the decompiler, but instead the type @@ -527,12 +518,12 @@ void Env::set_stack_structure_hints(const std::vector& hints for (auto& hint : hints) { StackStructureEntry entry; entry.hint = hint; - // parse the type spec. - TypeSpec base_typespec = dts->parse_type_spec(hint.element_type); - auto type_info = dts->ts.lookup_type(base_typespec); switch (hint.container_type) { - case StackStructureHint::ContainerType::NONE: + case StackStructureHint::ContainerType::NONE: { + // parse the type spec. + TypeSpec base_typespec = dts->parse_type_spec(hint.element_type); + auto type_info = dts->ts.lookup_type(base_typespec); // just a plain object on the stack. if (!type_info->is_reference()) { throw std::runtime_error( @@ -549,8 +540,29 @@ void Env::set_stack_structure_hints(const std::vector& hints entry.ref_type.print(), entry.hint.stack_offset, type_info->get_in_memory_alignment()); } + } break; - break; + case StackStructureHint::ContainerType::INLINE_ARRAY: { + TypeSpec base_typespec = dts->parse_type_spec(hint.element_type); + auto type_info = dts->ts.lookup_type(base_typespec); + if (!type_info->is_reference()) { + throw std::runtime_error( + fmt::format("Stack inline-array element type {} is not a reference and cannot be " + "stored in an inline-array. Use an array instead.", + base_typespec.print())); + } + + entry.ref_type = TypeSpec("inline-array", {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. + // sanity check the alignment + if (align(entry.hint.stack_offset, type_info->get_in_memory_alignment()) != + entry.hint.stack_offset) { + lg::error("Misaligned stack variable of type {} offset {} required align {}\n", + entry.ref_type.print(), entry.hint.stack_offset, + type_info->get_in_memory_alignment()); + } + } break; default: assert(false); } diff --git a/decompiler/IR2/Env.h b/decompiler/IR2/Env.h index df5de86c37..42afcbcdba 100644 --- a/decompiler/IR2/Env.h +++ b/decompiler/IR2/Env.h @@ -82,6 +82,7 @@ class Env { VariableWithCast get_variable_and_cast(const RegisterAccess& access) const; std::optional get_user_cast_for_access(const RegisterAccess& access) const; TypeSpec get_variable_type(const RegisterAccess& access, bool using_user_var_types) const; + TP_Type get_variable_tp_type(const RegisterAccess& access, bool using_user_var_types) const; /*! * Get the types in registers _after_ the given operation has completed. diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 8c56a3b8fc..428e65580a 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -454,6 +454,13 @@ goos::Object SetFormFormElement::to_form_internal(const Env& env) const { goos::Object SetFormFormElement::to_form_for_define(const Env& env) const { if (m_cast_for_define) { + // for vu-function, we just put a 0. These aren't supported + if (*m_cast_for_define == TypeSpec("vu-function")) { + return pretty_print::build_list( + fmt::format("define"), m_dst->to_form(env), + pretty_print::build_list(fmt::format("the-as {}", m_cast_for_define->print()), + pretty_print::to_symbol("0"))); + } return pretty_print::build_list( fmt::format("define"), m_dst->to_form(env), pretty_print::build_list(fmt::format("the-as {}", m_cast_for_define->print()), @@ -939,9 +946,13 @@ goos::Object BreakElement::to_form_internal(const Env& env) const { forms.push_back(pretty_print::build_list(return_code->to_form(env))); forms.push_back(pretty_print::build_list(dead_code->to_form(env))); } else { - forms.push_back(pretty_print::to_symbol("begin")); - return_code->inline_forms(forms, env); - forms.push_back(pretty_print::build_list(fmt::format("goto cfg-{}", lid))); + if (return_code->try_as_element()) { + return pretty_print::build_list(fmt::format("goto cfg-{}", lid)); + } else { + forms.push_back(pretty_print::to_symbol("begin")); + return_code->inline_forms(forms, env); + forms.push_back(pretty_print::build_list(fmt::format("goto cfg-{}", lid))); + } } return pretty_print::build_list(forms); } @@ -1363,6 +1374,107 @@ void CondNoElseElement::get_modified_regs(RegSet& regs) const { } } +CaseElement::CaseElement(Form* value, const std::vector& entries, Form* else_body) + : m_value(value), m_entries(entries), m_else_body(else_body) { + m_value->parent_element = this; + for (auto& entry : m_entries) { + for (auto& val : entry.vals) { + val->parent_element = this; + } + entry.body->parent_element = this; + } + if (m_else_body) { + m_else_body->parent_element = this; + } +} + +goos::Object CaseElement::to_form_internal(const Env& env) const { + std::vector list; + list.push_back(pretty_print::to_symbol("case")); + list.push_back(m_value->to_form(env)); + for (auto& e : m_entries) { + std::vector entry; + + // cases + std::vector cases; + for (auto& val : e.vals) { + cases.push_back(val->to_form(env)); + } + entry.push_back(pretty_print::build_list(cases)); + + // body + e.body->inline_forms(entry, env); + list.push_back(pretty_print::build_list(entry)); + } + + if (m_else_body) { + std::vector entry; + entry.push_back(pretty_print::to_symbol("else")); + m_else_body->inline_forms(entry, env); + list.push_back(pretty_print::build_list(entry)); + } + return pretty_print::build_list(list); +} + +void CaseElement::apply(const std::function& f) { + f(this); + m_value->apply(f); + for (auto& e : m_entries) { + for (auto& val : e.vals) { + val->apply(f); + } + e.body->apply(f); + } + + if (m_else_body) { + m_else_body->apply(f); + } +} + +void CaseElement::apply_form(const std::function& f) { + m_value->apply_form(f); + for (auto& e : m_entries) { + for (auto& val : e.vals) { + val->apply_form(f); + } + e.body->apply_form(f); + } + + if (m_else_body) { + m_else_body->apply_form(f); + } +} + +void CaseElement::collect_vars(RegAccessSet& vars, bool recursive) const { + if (recursive) { + m_value->collect_vars(vars, recursive); + for (auto& e : m_entries) { + for (auto& val : e.vals) { + val->collect_vars(vars, recursive); + } + e.body->collect_vars(vars, recursive); + } + + if (m_else_body) { + m_else_body->collect_vars(vars, recursive); + } + } +} + +void CaseElement::get_modified_regs(RegSet& regs) const { + m_value->get_modified_regs(regs); + for (auto& e : m_entries) { + for (auto& val : e.vals) { + val->get_modified_regs(regs); + } + e.body->get_modified_regs(regs); + } + + if (m_else_body) { + m_else_body->get_modified_regs(regs); + } +} + ///////////////////////////// // AbsElement ///////////////////////////// @@ -1634,14 +1746,26 @@ std::string fixed_operator_to_string(FixedOperatorKind kind) { return "fmax"; case FixedOperatorKind::LOGAND: return "logand"; + case FixedOperatorKind::LOGAND_IN_PLACE: + return "logand!"; case FixedOperatorKind::LOGIOR: return "logior"; + case FixedOperatorKind::LOGIOR_IN_PLACE: + return "logior!"; case FixedOperatorKind::LOGXOR: return "logxor"; case FixedOperatorKind::LOGNOR: return "lognor"; case FixedOperatorKind::LOGNOT: return "lognot"; + case FixedOperatorKind::LOGCLEAR: + return "logclear"; + case FixedOperatorKind::LOGCLEAR_IN_PLACE: + return "logclear!"; + case FixedOperatorKind::LOGTEST: + return "logtest?"; + case FixedOperatorKind::LOGTESTA: + return "logtesta?"; case FixedOperatorKind::SHL: return "shl"; case FixedOperatorKind::SHR: @@ -1696,6 +1820,8 @@ std::string fixed_operator_to_string(FixedOperatorKind kind) { return "vector-!"; case FixedOperatorKind::VECTOR_PLUS: return "vector+!"; + case FixedOperatorKind::VECTOR_CROSS: + return "vector-cross!"; case FixedOperatorKind::VECTOR_FLOAT_PRODUCT: return "vector-float*!"; case FixedOperatorKind::L32_NOT_FALSE_CBOOL: @@ -1799,10 +1925,11 @@ void GenericElement::get_modified_regs(RegSet& regs) const { CastElement::CastElement(TypeSpec type, Form* source, bool numeric) : m_type(std::move(type)), m_source(source), m_numeric(numeric) { - source->parent_element = this; + m_source->parent_element = this; } goos::Object CastElement::to_form_internal(const Env& env) const { + // assert(m_source->parent_element == this); auto atom = form_as_atom(m_source); if (atom && atom->is_var()) { return pretty_print::build_list( @@ -1814,21 +1941,25 @@ goos::Object CastElement::to_form_internal(const Env& env) const { } void CastElement::apply(const std::function& f) { + // assert(m_source->parent_element == this); f(this); m_source->apply(f); } void CastElement::apply_form(const std::function& f) { + // assert(m_source->parent_element == this); m_source->apply_form(f); } void CastElement::collect_vars(RegAccessSet& vars, bool recursive) const { + // assert(m_source->parent_element == this); if (recursive) { m_source->collect_vars(vars, recursive); } } void CastElement::get_modified_regs(RegSet& regs) const { + assert(m_source->parent_element == this); m_source->get_modified_regs(regs); } @@ -2486,6 +2617,10 @@ goos::Object StackStructureDefElement::to_form_internal(const Env&) const { case StackStructureHint::ContainerType::NONE: return pretty_print::build_list( fmt::format("new 'stack-no-clear '{}", m_entry.ref_type.print())); + case StackStructureHint::ContainerType::INLINE_ARRAY: + 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)); default: assert(false); } diff --git a/decompiler/IR2/Form.h b/decompiler/IR2/Form.h index 0c8f2f8957..b26bccba41 100644 --- a/decompiler/IR2/Form.h +++ b/decompiler/IR2/Form.h @@ -54,6 +54,10 @@ class FormElement { bool allow_side_effects); bool is_popped() const { return m_popped; } + FormElement() = default; + FormElement(const FormElement& other) = delete; + FormElement& operator=(const FormElement& other) = delete; + void mark_popped() { assert(!m_popped); m_popped = true; @@ -185,6 +189,11 @@ class SimpleExpressionElement : public FormElement { FormStack& stack, std::vector* result, bool allow_side_effects); + FormElement* update_from_stack_logor_or_logand_helper(const Env& env, + FixedOperatorKind kind, + FormPool& pool, + FormStack& stack, + bool allow_side_effects); void update_from_stack_logor_or_logand(const Env& env, FixedOperatorKind kind, FormPool& pool, @@ -196,12 +205,12 @@ class SimpleExpressionElement : public FormElement { FormStack& stack, std::vector* result, bool allow_side_effects); - void update_from_stack_vector_plus_minus(bool is_add, - const Env& env, - FormPool& pool, - FormStack& stack, - std::vector* result, - bool allow_side_effects); + void update_from_stack_vector_plus_minus_cross(FixedOperatorKind op_kind, + const Env& env, + FormPool& pool, + FormStack& stack, + std::vector* result, + bool allow_side_effects); void update_from_stack_vector_float_product(const Env& env, FormPool& pool, FormStack& stack, @@ -842,6 +851,27 @@ class CondNoElseElement : public FormElement { bool allow_in_if() const override { return false; } }; +class CaseElement : public FormElement { + public: + struct Entry { + std::vector vals; + Form* body = nullptr; + }; + + CaseElement(Form* value, const std::vector& entries, Form* else_body); + goos::Object to_form_internal(const Env& env) const override; + void apply(const std::function& f) override; + void apply_form(const std::function& f) override; + void collect_vars(RegAccessSet& vars, bool recursive) const override; + void get_modified_regs(RegSet& regs) const override; + bool allow_in_if() const override { return false; } + + private: + Form* m_value = nullptr; + std::vector m_entries; + Form* m_else_body = nullptr; // may be nullptr, if no else. +}; + /*! * Represents a (abs x) expression. */ @@ -1253,6 +1283,7 @@ class ConstantFloatElement : public FormElement { FormStack& stack, std::vector* result, bool allow_side_effects) override; + float value() const { return m_value; } private: float m_value; @@ -1749,5 +1780,9 @@ GenericElement* alloc_generic_token_op(const std::string& name, const std::vector& args, FormPool& pool); Form* alloc_var_form(const RegisterAccess& var, FormPool& pool); -Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env); +Form* try_cast_simplify(Form* in, + const TypeSpec& new_type, + FormPool& pool, + const Env& env, + bool tc_pass = false); } // namespace decompiler diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 44689124a5..2d454e5faa 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -7,6 +7,7 @@ #include "decompiler/util/data_decompile.h" #include "decompiler/IR2/bitfields.h" #include "common/util/BitUtils.h" +#include "common/type_system/state.h" /* * TODO @@ -64,14 +65,59 @@ Form* strip_pcypld_64(Form* in) { return in; } } + +std::optional get_goal_float_constant(Form* in) { + auto as_fc = in->try_as_element(); + if (as_fc) { + return as_fc->value(); + } + return {}; +} } // namespace -Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env) { +Form* try_cast_simplify(Form* in, + const TypeSpec& new_type, + FormPool& pool, + const Env& env, + bool tc_pass) { auto in_as_cast = dynamic_cast(in->try_as_single_element()); if (in_as_cast && in_as_cast->type() == new_type) { return in; // no need to cast again, it already has it! } + if (new_type == TypeSpec("meters")) { + auto fc = get_goal_float_constant(in); + + if (fc) { + double div = (double)*fc / METER_LENGTH; // GOOS will use doubles here + if (div * METER_LENGTH == *fc) { + return pool.alloc_single_element_form( + nullptr, + GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "meters")), + pool.alloc_single_element_form(nullptr, div)); + } else { + lg::error("Floating point value {} could not be converted to meters.", *fc); + } + } + } + + if (new_type == TypeSpec("degrees")) { + auto fc = get_goal_float_constant(in); + if (fc) { + double div = (double)*fc / DEGREES_LENGTH; // GOOS will use doubles here + if (div * DEGREES_LENGTH == *fc) { + return pool.alloc_single_element_form( + nullptr, + GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "degrees")), + pool.alloc_single_element_form(nullptr, div)); + } else { + lg::error("Floating point value {} could not be converted to degrees.", *fc); + } + } + } + auto type_info = env.dts->ts.lookup_type(new_type); auto bitfield_info = dynamic_cast(type_info); if (bitfield_info) { @@ -91,7 +137,11 @@ Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, cons } } - return nullptr; + if (tc_pass) { + return in; + } else { + return nullptr; + } } bool Form::has_side_effects() { @@ -285,8 +335,12 @@ void pop_helper(const std::vector& vars, /*! * This should be used to generate all casts. */ -Form* cast_form(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env) { - auto result = try_cast_simplify(in, new_type, pool, env); +Form* cast_form(Form* in, + const TypeSpec& new_type, + FormPool& pool, + const Env& env, + bool tc_pass = false) { + auto result = try_cast_simplify(in, new_type, pool, env, tc_pass); if (result) { return result; } @@ -340,15 +394,12 @@ std::vector pop_to_forms(const std::vector& vars, return forms; } -// TODO - if we start using child classes of float/int/uint for things like degrees/meters -// we may need to adjust these. - /*! * type == float (exactly)? */ bool is_float_type(const Env& env, int my_idx, RegisterAccess var) { auto type = env.get_types_before_op(my_idx).get(var.reg()).typespec(); - return type == TypeSpec("float"); + return env.dts->ts.tc(TypeSpec("float"), type); } /*! @@ -436,6 +487,10 @@ Form* make_cast_if_needed(Form* in, if (in_type == out_type) { return in; } + + if (out_type == TypeSpec("float") && env.dts->ts.tc(TypeSpec("float"), in_type)) { + return in; + } return cast_form(in, out_type, pool, env); } @@ -528,7 +583,7 @@ void SimpleExpressionElement::update_from_stack_gpr_to_fpr(const Env& env, // set ourself to identity. m_expr = src.as_expr(); - if (src_type.typespec() == TypeSpec("float")) { + if (env.dts->ts.tc(TypeSpec("float"), src_type.typespec())) { // got a float as an input, we can convert it to an FPR with no effect. for (auto x : src_fes) { result->push_back(x); @@ -548,7 +603,8 @@ void SimpleExpressionElement::update_from_stack_fpr_to_gpr(const Env& env, bool allow_side_effects) { auto src = m_expr.get_arg(0); auto src_type = env.get_types_before_op(m_my_idx).get(src.var().reg()); - if (src_type.typespec() == TypeSpec("float") || src_type.typespec() == TypeSpec("int")) { + if (env.dts->ts.tc(TypeSpec("float"), src_type.typespec()) || + src_type.typespec() == TypeSpec("int")) { // set ourself to identity. m_expr = src.as_expr(); // then go again. @@ -633,6 +689,54 @@ void SimpleExpressionElement::update_from_stack_si_1(const Env& env, make_cast_if_needed(arg, in_type, TypeSpec("int"), pool, env))); } +namespace { +std::vector get_addition_elements(Form* in) { + auto gen_elt = in->try_as_element(); + if (gen_elt && gen_elt->op().is_fixed(FixedOperatorKind::ADDITION)) { + return gen_elt->elts(); + } else { + return {in}; + } +} + +FormElement* make_and_compact_addition(Form* arg0, + Form* arg1, + const std::optional& arg0_cast, + const std::optional& arg1_cast, + FormPool& pool, + const Env& env) { + if (!arg1_cast) { + auto arg0_elts = get_addition_elements(arg0); + assert(!arg0_elts.empty()); + if (arg0_cast) { + arg0_elts.front() = cast_form(arg0_elts.front(), *arg0_cast, pool, env); + } + + // it's fine to only cast the first thing here - the rest are already cast properly. + auto arg1_elts = get_addition_elements(arg1); + assert(!arg1_elts.empty()); + if (arg1_cast) { + arg1_elts.front() = cast_form(arg1_elts.front(), *arg1_cast, pool, env); + } + + // add all together + arg0_elts.insert(arg0_elts.end(), arg1_elts.begin(), arg1_elts.end()); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::ADDITION), arg0_elts); + } else { + if (arg0_cast) { + arg0 = cast_form(arg0, *arg0_cast, pool, env); + } + + if (arg1_cast) { + arg1 = cast_form(arg1, *arg1_cast, pool, env); + } + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::ADDITION), arg0, arg1); + } +} +} // namespace + void SimpleExpressionElement::update_from_stack_add_i(const Env& env, FormPool& pool, FormStack& stack, @@ -828,7 +932,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, result->push_back(pool.alloc_element(args.at(0), rd_ok.addr_of, tokens)); return; } else { - throw std::runtime_error("Failed to match product_with_constant inline array access."); + throw std::runtime_error("Failed to match product_with_constant inline array access 1."); } } } else if (arg0_type.kind == TP_Type::Kind::PRODUCT_WITH_CONSTANT && @@ -858,7 +962,9 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, {Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::MULTIPLICATION), {Matcher::any(0), Matcher::integer(rd_in.stride)}), Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::MULTIPLICATION), - {Matcher::integer(rd_in.stride), Matcher::any(0)})}); + {Matcher::match_or({Matcher::cast("uint", Matcher::integer(rd_in.stride)), + Matcher::integer(rd_in.stride)}), + Matcher::any(0)})}); auto match_result = match(arg0_matcher, args.at(0)); if (match_result.matched) { bool used_index = false; @@ -876,14 +982,26 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, result->push_back(pool.alloc_element(args.at(1), rd_ok.addr_of, tokens)); return; } else { - throw std::runtime_error("Failed to match product_with_constant inline array access."); + lg::error("Bad is {}\n", args.at(0)->to_string(env)); + throw std::runtime_error("Failed to match product_with_constant inline array access 2."); } } } } auto arg0_type = env.get_types_before_op(m_my_idx).get(m_expr.get_arg(0).var().reg()); - if ((arg0_i && arg1_i) || (arg0_u && arg1_u)) { + + if (env.dts->ts.tc(TypeSpec("structure"), arg0_type.typespec()) && m_expr.get_arg(1).is_int()) { + auto type_info = env.dts->ts.lookup_type(arg0_type.typespec()); + if (type_info->get_size_in_memory() == m_expr.get_arg(1).get_int()) { + auto new_form = pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::ADDITION_PTR), args.at(0), args.at(1)); + result->push_back(new_form); + return; + } + } + + if (false && ((arg0_i && arg1_i) || (arg0_u && arg1_u))) { auto new_form = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::ADDITION), args.at(0), args.at(1)); result->push_back(new_form); @@ -898,19 +1016,19 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, GenericOperator::make_fixed(FixedOperatorKind::ADDITION_PTR), args.at(1), args.at(0)); result->push_back(new_form); } else { - auto casted0 = args.at(0); + std::optional arg0_cast, arg1_cast; - if (!arg0_i && !arg0_u && arg0_type.typespec() != TypeSpec("binteger")) { - casted0 = pool.alloc_single_element_form( - nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(0)); + if (!arg0_i && !arg0_u && arg0_type.typespec() != TypeSpec("binteger") && + !env.dts->ts.tc(TypeSpec("integer"), arg0_type.typespec())) { + arg0_cast = TypeSpec(arg0_i ? "int" : "uint"); } - auto casted1 = pool.alloc_single_element_form( - nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(1)); + if (!arg1_i && !arg1_u) { + arg1_cast = TypeSpec(arg0_i ? "int" : "uint"); + } - auto new_form = pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::ADDITION), casted0, casted1); - result->push_back(new_form); + result->push_back( + make_and_compact_addition(args.at(0), args.at(1), arg0_cast, arg1_cast, pool, env)); } } @@ -1047,17 +1165,41 @@ void SimpleExpressionElement::update_from_stack_pcypld(const Env& env, } } + /* + pcpyud v1, s4, r0 + ld a0, L152(fp) + and v1, v1, a0 + lui a0, 1 + dsll32 a0, a0, 0 + or v1, v1, a0 + pcpyld v1, v1, s4 + por s4, v1, r0 + */ + + auto as_mod = args.at(0)->try_as_element(); + if (as_mod && as_mod->from_pcpyud()) { + auto base_form = as_mod->base()->to_form(env); + auto a1_form = args.at(1)->to_form(env); + if (base_form == a1_form) { + as_mod->clear_pcpyud_flag(); + result->push_back(as_mod); + return; + } else { + fmt::print("pcpyud rewrite form fail: {} {}\n", base_form.print(), a1_form.print()); + } + } auto new_form = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::PCPYLD), args.at(0), args.at(1)); result->push_back(new_form); } -void SimpleExpressionElement::update_from_stack_vector_plus_minus(bool is_add, - const Env& env, - FormPool& pool, - FormStack& stack, - std::vector* result, - bool allow_side_effects) { +void SimpleExpressionElement::update_from_stack_vector_plus_minus_cross( + FixedOperatorKind op_kind, + const Env& env, + FormPool& pool, + FormStack& stack, + std::vector* result, + bool allow_side_effects) { std::vector popped_args = pop_to_forms({m_expr.get_arg(0).var(), m_expr.get_arg(1).var(), m_expr.get_arg(2).var()}, env, pool, stack, allow_side_effects); @@ -1070,8 +1212,7 @@ void SimpleExpressionElement::update_from_stack_vector_plus_minus(bool is_add, } auto new_form = pool.alloc_element( - GenericOperator::make_fixed(is_add ? FixedOperatorKind::VECTOR_PLUS - : FixedOperatorKind::VECTOR_MINUS), + GenericOperator::make_fixed(op_kind), std::vector{popped_args.at(0), popped_args.at(1), popped_args.at(2)}); result->push_back(new_form); } @@ -1190,22 +1331,51 @@ Form* strip_int_or_uint_cast(Form* in) { } } // namespace -void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, - FixedOperatorKind kind, - FormPool& pool, - FormStack& stack, - std::vector* result, - bool allow_side_effects) { +FormElement* SimpleExpressionElement::update_from_stack_logor_or_logand_helper( + const Env& env, + FixedOperatorKind kind, + FormPool& pool, + FormStack& stack, + bool allow_side_effects) { + // grab the normal variable type auto arg0_type = env.get_variable_type(m_expr.get_arg(0).var(), true); + // and try to get it as a bitfield auto type_info = env.dts->ts.lookup_type(arg0_type); auto bitfield_info = dynamic_cast(type_info); + bool had_pcpyud = false; + TypeSpec bitfield_type = arg0_type; + + if (!bitfield_info) { + // the above won't work if we're already done a pcpyud to grab the upper 64 bits. + // we need to grab the type in the register (a TP_type) and check + const auto& arg0_reg_type = + env.get_types_before_op(m_expr.get_arg(0).var().idx()).get(m_expr.get_arg(0).var().reg()); + if (arg0_reg_type.kind == TP_Type::Kind::PCPYUD_BITFIELD) { + // yes! + had_pcpyud = true; + bitfield_info = + dynamic_cast(env.dts->ts.lookup_type(arg0_reg_type.get_bitfield_type())); + assert(bitfield_info); + } else if (arg0_reg_type.kind == TP_Type::Kind::PCPYUD_BITFIELD_AND) { + // already have the pcpyud in the thing. + bitfield_info = + dynamic_cast(env.dts->ts.lookup_type(arg0_reg_type.get_bitfield_type())); + assert(bitfield_info); + } + } + if (bitfield_info && m_expr.get_arg(1).is_int()) { // andi, ori with bitfield. auto base = pop_to_forms({m_expr.get_arg(0).var()}, env, pool, stack, allow_side_effects).at(0); auto read_elt = dynamic_cast(base->try_as_single_element()); if (!read_elt) { - read_elt = pool.alloc_element(base, arg0_type); + read_elt = pool.alloc_element(base, bitfield_type); + assert(!had_pcpyud); + } else { + if (had_pcpyud) { + assert(read_elt->has_pcpyud()); + } } BitfieldManip::Kind manip_kind; @@ -1220,15 +1390,17 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, BitfieldManip step(manip_kind, m_expr.get_arg(1).get_int()); auto other = read_elt->push_step(step, env.dts->ts, pool, env); if (other) { - result->push_back(other); + return other; } else { - result->push_back(read_elt); + return read_elt; } - return; } else if (!m_expr.get_arg(1).is_var()) { // andi, something else (don't think this can happen?) - update_from_stack_copy_first_int_2(env, kind, pool, stack, result, allow_side_effects); + std::vector result; + update_from_stack_copy_first_int_2(env, kind, pool, stack, &result, allow_side_effects); + assert(result.size() == 1); + return result.at(0); } else { // and, two forms auto arg1_type = env.get_variable_type(m_expr.get_arg(1).var(), true); @@ -1247,13 +1419,19 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, bool made_new_read_elt = false; auto read_elt = dynamic_cast(args.at(0)->try_as_single_element()); if (!read_elt) { - read_elt = pool.alloc_element(args.at(0), arg0_type); + read_elt = pool.alloc_element(args.at(0), bitfield_type); made_new_read_elt = true; + assert(!had_pcpyud); + } else { + if (had_pcpyud) { + assert(read_elt->has_pcpyud()); + } } auto stripped_arg1 = strip_int_or_uint_cast(args.at(1)); - auto arg1_atom = form_as_atom(strip_int_or_uint_cast(args.at(1))); - if (arg1_atom && arg1_atom->is_int()) { + // auto arg1_atom = form_as_atom(strip_int_or_uint_cast(args.at(1))); + auto arg1_as_int = get_goal_integer_constant(stripped_arg1, env); + if (arg1_as_int) { BitfieldManip::Kind manip_kind; if (kind == FixedOperatorKind::LOGAND) { manip_kind = BitfieldManip::Kind::LOGAND_WITH_CONSTANT_INT; @@ -1262,11 +1440,14 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, } else { assert(false); } - BitfieldManip step(manip_kind, arg1_atom->get_int()); + BitfieldManip step(manip_kind, *arg1_as_int); auto other = read_elt->push_step(step, env.dts->ts, pool, env); - assert(!other); // shouldn't be complete. - result->push_back(read_elt); - return; + // assert(!other); // shouldn't be complete. + if (other) { + return other; + } else { + return read_elt; + } } else if (!made_new_read_elt) { BitfieldManip::Kind manip_kind; if (kind == FixedOperatorKind::LOGAND) { @@ -1279,22 +1460,21 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, auto step = BitfieldManip::from_form(manip_kind, stripped_arg1); auto other = read_elt->push_step(step, env.dts->ts, pool, env); if (other) { - result->push_back(other); + return other; } else { - result->push_back(read_elt); + return read_elt; } - return; } } - if ((arg0_i && arg1_i) || (arg0_u && arg1_u) || + if (((arg0_i || arg0_u) && (arg1_i || arg1_u)) || (arg0_n && arg1_type.base_type() == "pointer") || (arg1_n && arg0_type.base_type() == "pointer")) { // types already good // we also allow (logand intvar pointer) and (logand pointer intvar) auto new_form = pool.alloc_element(GenericOperator::make_fixed(kind), args.at(0), args.at(1)); - result->push_back(new_form); + return new_form; // types bad, insert cast. } else { // this is an ugly hack to make (logand (lognot (enum-bitfield xxxx)) work. @@ -1319,22 +1499,76 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, nullptr, GenericOperator::make_fixed(FixedOperatorKind::LOGNOT), inverted); auto new_form = pool.alloc_element(GenericOperator::make_fixed(kind), normal, args.at(1)); - result->push_back(new_form); - // assert(false); - return; + return new_form; } } } + bool arg0_int_like = env.dts->ts.tc(TypeSpec("integer"), arg0_type); + bool arg1_int_like = env.dts->ts.tc(TypeSpec("integer"), arg1_type); + + if ((arg0_int_like) && (arg1_int_like)) { + auto new_form = pool.alloc_element(GenericOperator::make_fixed(kind), + args.at(0), args.at(1)); + return new_form; + // types bad, insert cast. + } + auto cast = pool.alloc_single_element_form( nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(1)); auto new_form = pool.alloc_element(GenericOperator::make_fixed(kind), args.at(0), cast); - result->push_back(new_form); + return new_form; } } } +void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, + FixedOperatorKind kind, + FormPool& pool, + FormStack& stack, + std::vector* result, + bool allow_side_effects) { + auto element = + update_from_stack_logor_or_logand_helper(env, kind, pool, stack, allow_side_effects); + + /* + (defmacro logclear (a b) + "Returns the result of setting the bits in b to zero in a" + `(logand (lognot ,b) ,a) + ) + */ + + constexpr int a_form = 0; + constexpr int b_form = 1; + + auto lognot_submatcher = + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::LOGNOT), {Matcher::any(b_form)}); + auto lognot_submatchers = + Matcher::match_or({Matcher::cast("uint", lognot_submatcher), + Matcher::cast("int", lognot_submatcher), lognot_submatcher}); + + auto logclear_matcher = + Matcher::match_or({Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::LOGAND), + {lognot_submatchers, Matcher::any(a_form)}), + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::LOGAND), + {Matcher::any(a_form), lognot_submatchers})}); + + Form hack_form; + hack_form.elts().push_back(element); + + auto mr = match(logclear_matcher, &hack_form); + if (mr.matched) { + result->push_back(pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::LOGCLEAR), + std::vector{mr.maps.forms.at(a_form), mr.maps.forms.at(b_form)})); + + return; + } + + result->push_back(element); +} + void SimpleExpressionElement::update_from_stack_left_shift(const Env& env, FormPool& pool, FormStack& stack, @@ -1744,10 +1978,16 @@ void SimpleExpressionElement::update_from_stack(const Env& env, update_from_stack_pcypld(env, pool, stack, result, allow_side_effects); break; case SimpleExpression::Kind::VECTOR_PLUS: - update_from_stack_vector_plus_minus(true, env, pool, stack, result, allow_side_effects); + update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_PLUS, env, pool, stack, + result, allow_side_effects); break; case SimpleExpression::Kind::VECTOR_MINUS: - update_from_stack_vector_plus_minus(false, env, pool, stack, result, allow_side_effects); + update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_MINUS, env, pool, stack, + result, allow_side_effects); + break; + case SimpleExpression::Kind::VECTOR_CROSS: + update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_CROSS, env, pool, stack, + result, allow_side_effects); break; case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT: update_from_stack_vector_float_product(env, pool, stack, result, allow_side_effects); @@ -1781,6 +2021,13 @@ void SetVarElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta return; } + // bool skip = false; + // auto dst_type = env.get_variable_type(m_dst, false); + // auto as_bitfield = dynamic_cast(env.dts->ts.lookup_type(dst_type)); + // if (as_bitfield && as_bitfield->get_load_size() == 16) { + // skip = true; + // } + // if we are a reg-reg move that consumes the original, push it without popping from stack. // it is the Stack's responsibility to untangle these later on. if (m_src->is_single_element()) { @@ -1808,6 +2055,28 @@ void SetVarElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta // we aren't a reg-reg move, so update our source m_src->update_children_from_stack(env, pool, stack, true); + /* + auto src_as_bf_set = dynamic_cast(m_src->try_as_single_element()); + if (src_as_bf_set && !src_as_bf_set->from_pcpyud() && src_as_bf_set->mods().size() == 1) { + auto dst_form = m_dst.to_form(env, RegisterAccess::Print::AS_VARIABLE_NO_CAST); + auto src_form = src_as_bf_set->base()->to_form(env); + if (dst_form == src_form) { + // success! + auto value = src_as_bf_set->mods().at(0).value; + value->parent_element = this; + + // make the (-> thing bitfield) + auto field_token = DerefToken::make_field_name(src_as_bf_set->mods().at(0).field_name); + auto dst_dform = pool.alloc_single_element_form(nullptr, + SimpleAtom::make_var(m_dst)); auto loc_elt = pool.alloc_element(dst_dform, false, + field_token); loc_elt->inline_nested(); auto loc = pool.alloc_single_form(nullptr, loc_elt); auto + new_form_el = pool.alloc_element(loc, value); + stack.push_form_element(new_form_el, true); + return; + } + } + */ + for (auto x : m_src->elts()) { assert(x->parent_form == m_src); } @@ -1849,7 +2118,7 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack // check for bitfield setting: auto src_as_bf_set = dynamic_cast(m_src->try_as_single_element()); - if (src_as_bf_set && src_as_bf_set->mods().size() == 1) { + if (src_as_bf_set && !src_as_bf_set->from_pcpyud() && src_as_bf_set->mods().size() == 1) { auto dst_form = m_dst->to_form(env); auto src_form = src_as_bf_set->base()->to_form(env); if (dst_form == src_form) { @@ -1867,6 +2136,31 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack m_dst = loc; m_src = value; } + } else if (src_as_bf_set) { + fmt::print("invalid bf set: {}\n", src_as_bf_set->to_string(env)); + } + + const std::pair in_place_ops[] = { + {FixedOperatorKind::ADDITION, FixedOperatorKind::ADDITION_IN_PLACE}, + {FixedOperatorKind::ADDITION_PTR, FixedOperatorKind::ADDITION_PTR_IN_PLACE}, + {FixedOperatorKind::LOGAND, FixedOperatorKind::LOGAND_IN_PLACE}, + {FixedOperatorKind::LOGIOR, FixedOperatorKind::LOGIOR_IN_PLACE}, + {FixedOperatorKind::LOGCLEAR, FixedOperatorKind::LOGCLEAR_IN_PLACE}}; + + auto src_as_generic = m_src->try_as_element(); + if (src_as_generic) { + for (auto& op_pair : in_place_ops) { + if (src_as_generic->op().is_fixed(op_pair.first)) { + auto dst_form = m_dst->to_form(env); + auto add_form_0 = src_as_generic->elts().at(0)->to_form(env); + + if (dst_form == add_form_0) { + src_as_generic->op() = GenericOperator::make_fixed(op_pair.second); + stack.push_form_element(src_as_generic, true); + return; + } + } + } } stack.push_form_element(this, true); @@ -2155,6 +2449,34 @@ void AbsElement::update_from_stack(const Env& env, result->push_back(new_form); } +namespace { +/*! + * Try to recognize setting the next state. + */ +Form* get_set_next_state(FormElement* set_elt, const Env& env) { + auto as_set = dynamic_cast(set_elt); + if (!as_set) { + return nullptr; + } + + auto dst = as_set->dst(); + auto dst_matcher = + Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("next-state")}); + auto mr = match(dst_matcher, dst); + if (!mr.matched) { + fmt::print("failed to match dst {}\n", dst->to_string(env)); + return nullptr; + } + + if (mr.maps.regs.at(0)->reg() != Register(Reg::GPR, Reg::S6)) { + fmt::print("failed to match pp reg, got {}\n", mr.maps.regs.at(0)->reg().to_string()); + return nullptr; + } + + return as_set->src(); +} +} // namespace + /////////////////// // FunctionCallElement /////////////////// @@ -2175,11 +2497,42 @@ void FunctionCallElement::update_from_stack(const Env& env, } TypeSpec function_type; - auto& tp_type = env.get_types_before_op(all_pop_vars.at(0).idx()).get(all_pop_vars.at(0).reg()); + auto& in_type_state = env.get_types_before_op(all_pop_vars.at(0).idx()); + auto& tp_type = in_type_state.get(all_pop_vars.at(0).reg()); if (env.has_type_analysis()) { function_type = tp_type.typespec(); } + // if we're actually a go: + Form* go_next_state = nullptr; + if (tp_type.kind == TP_Type::Kind::ENTER_STATE_FUNCTION) { + auto& next_state_type = in_type_state.next_state_type; + if (next_state_type.typespec().base_type() != "state") { + throw std::runtime_error("Bad state type in expressions (not state): " + + next_state_type.print()); + } + if (next_state_type.typespec().arg_count() == 0) { + throw std::runtime_error("Bad state type in expressions (no args): " + + next_state_type.print()); + } + + // modify our type for the go. + function_type = state_to_go_function(next_state_type.typespec()); + + // up next, we need to deal with the + // (set! (-> pp next-state) process-drawable-art-error) + auto stack_back = stack.pop_back(pool); + + auto next_state = get_set_next_state(stack_back, env); + if (!next_state) { + throw std::runtime_error( + fmt::format("Expressions couldn't figure out this go. The back of the stack was {} and " + "we expected to see something set (-> pp next-state) instead.", + stack_back->to_string(env))); + } + go_next_state = next_state; + } + bool swap_function = tp_type.kind == TP_Type::Kind::NON_VIRTUAL_METHOD && all_pop_vars.size() >= 2; if (tp_type.kind == TP_Type::Kind::NON_VIRTUAL_METHOD) { @@ -2218,8 +2571,9 @@ void FunctionCallElement::update_from_stack(const Env& env, } auto desired_arg_type = function_type.get_arg(arg_id); - if (!env.dts->ts.tc(desired_arg_type, actual_arg_type)) { - arg_forms.push_back(cast_form(val, desired_arg_type, pool, env)); + if (env.dts->should_attempt_cast_simplify(desired_arg_type, actual_arg_type)) { + arg_forms.push_back(cast_form(val, desired_arg_type, pool, env, + env.dts->ts.tc(desired_arg_type, actual_arg_type))); } else { arg_forms.push_back(val); } @@ -2230,6 +2584,16 @@ void FunctionCallElement::update_from_stack(const Env& env, FormElement* new_form = nullptr; + if (go_next_state) { + arg_forms.insert(arg_forms.begin(), go_next_state); + auto go_form = pool.alloc_element( + GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "go")), + arg_forms); + result->push_back(go_form); + return; + } + { // deal with virtual method calls. auto matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::METHOD_OF_OBJECT), @@ -2247,23 +2611,30 @@ void FunctionCallElement::update_from_stack(const Env& env, "type."); } - if (!env.dts->ts.should_use_virtual_methods(tp_type.method_from_type(), - tp_type.method_id())) { + bool is_res_lump = tp_type.method_from_type().base_type() == "res-lump"; + bool should_use_virtual = + env.dts->ts.should_use_virtual_methods(tp_type.method_from_type(), tp_type.method_id()); + + if (!should_use_virtual && !is_res_lump) { throw std::runtime_error( fmt::format("Method call on {} id {} used a virtual call unexpectedly.", tp_type.method_from_type().print(), tp_type.method_id())); } - // fmt::print("STACK\n{}\n\n", stack.print(env)); - auto pop = - pop_to_forms({*arg0_mr.maps.regs.at(0)}, env, pool, stack, allow_side_effects, {}, {2}) - .at(0); - // fmt::print("GOT: {}\n", pop->to_string(env)); - arg_forms.at(0) = pop; - new_form = pool.alloc_element( - GenericOperator::make_function(mr.maps.forms.at(1)), arg_forms); - result->push_back(new_form); - return; + if (should_use_virtual) { + // fmt::print("STACK\n{}\n\n", stack.print(env)); + auto pop = pop_to_forms({*arg0_mr.maps.regs.at(0)}, env, pool, stack, allow_side_effects, + {}, {2}) + .at(0); + // fmt::print("GOT: {}\n", pop->to_string(env)); + arg_forms.at(0) = pop; + + new_form = pool.alloc_element( + GenericOperator::make_function(mr.maps.forms.at(1)), arg_forms); + result->push_back(new_form); + assert(!go_next_state); + return; + } } } } @@ -2310,6 +2681,7 @@ void FunctionCallElement::update_from_stack(const Env& env, auto new_op = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::OBJECT_NEW), new_args); result->push_back(new_op); + assert(!go_next_state); return; } if (name == "new" && type_1 == "type") { @@ -2317,6 +2689,7 @@ void FunctionCallElement::update_from_stack(const Env& env, auto new_op = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::TYPE_NEW), new_args); result->push_back(new_op); + assert(!go_next_state); return; } else if (name == "new") { constexpr int allocation = 2; @@ -2352,6 +2725,7 @@ void FunctionCallElement::update_from_stack(const Env& env, auto cons_op = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::CONS), cons_args); result->push_back(cons_op); + assert(!go_next_state); return; } else { // just normal construction on the heap @@ -2361,6 +2735,7 @@ void FunctionCallElement::update_from_stack(const Env& env, auto new_op = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::NEW), new_args); result->push_back(new_op); + assert(!go_next_state); return; } } @@ -2390,8 +2765,8 @@ void FunctionCallElement::update_from_stack(const Env& env, if (tp_type.kind != TP_Type::Kind::NON_VIRTUAL_METHOD) { throw std::runtime_error(fmt::format( "Method internal mismatch. METHOD_OF_TYPE operator didn't get a NON_VIRTUAL_METHOD " - "type. Got {} instead.", - tp_type.print())); + "type. Got {} instead. {} {}", + tp_type.print(), name, match_result.maps.forms.at(type_source)->to_string(env))); } } @@ -2410,6 +2785,7 @@ void FunctionCallElement::update_from_stack(const Env& env, auto gop = GenericOperator::make_function(method_op); result->push_back(pool.alloc_element(gop, arg_forms)); + assert(!go_next_state); return; } @@ -2447,6 +2823,7 @@ void FunctionCallElement::update_from_stack(const Env& env, } result->push_back(pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::NEW), stack_new_args)); + assert(!go_next_state); return; } } @@ -2737,6 +3114,18 @@ void CondWithElseElement::push_to_stack(const Env& env, FormPool& pool, FormStac } } + // merge conds in the else block. + auto else_as_another_cond = else_ir->try_as_element(); + if (else_as_another_cond) { + while (else_as_another_cond) { + for (auto& e : else_as_another_cond->entries) { + entries.push_back(e); + } + else_ir = else_as_another_cond->else_ir; + else_as_another_cond = else_ir->try_as_element(); + } + } + if (rewrite_as_set) { if (set_unused) { stack.push_form_element(this, true); @@ -2920,8 +3309,14 @@ void ShortCircuitElement::push_to_stack(const Env& env, FormPool& pool, FormStac entry.condition->clear(); for (auto e : new_entries) { + if (dynamic_cast(e)) { + continue; + } entry.condition->push_back(e); } + if (entry.condition->elts().empty()) { + entry.condition->push_back(pool.alloc_element()); + } } } @@ -3014,6 +3409,23 @@ Form* try_make_constant_from_int_for_compare(s64 value, } return nullptr; } + +std::vector cast_to_64_bit(const std::vector& forms, + const std::vector& types, + FormPool& pool, + const Env& env) { + std::vector result; + for (size_t i = 0; i < forms.size(); i++) { + if (env.dts->ts.tc(TypeSpec("uint128"), types.at(i))) { + result.push_back(cast_form(forms[i], TypeSpec("uint"), pool, env)); + } else if (env.dts->ts.tc(TypeSpec("int128"), types.at(i))) { + result.push_back(cast_form(forms[i], TypeSpec("int"), pool, env)); + } else { + result.push_back(forms[i]); + } + } + return result; +} } // namespace FormElement* ConditionElement::make_zero_check_generic(const Env& env, @@ -3022,24 +3434,16 @@ FormElement* ConditionElement::make_zero_check_generic(const Env& env, const std::vector& source_types) { // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) assert(source_forms.size() == 1); - auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {Matcher::any(0), Matcher::any_integer(1)}), - source_forms.at(0)); - if (mr.matched) { - s64 value = -mr.maps.ints.at(1); - auto value_form = pool.alloc_single_element_form( - nullptr, SimpleAtom::make_int_constant(value)); - return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), value_form}); - } auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); if (enum_type_info && !enum_type_info->is_bitfield()) { // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value - mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {make_int_uint_cast_matcher(Matcher::any(0)), - make_int_uint_cast_matcher(Matcher::any_integer(1))}), - source_forms.at(0)); + auto mr = match( + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {make_int_uint_cast_matcher(Matcher::any(0)), + Matcher::match_or({Matcher::any_integer(1), + make_int_uint_cast_matcher(Matcher::any_integer(1))})}), + source_forms.at(0)); if (mr.matched) { s64 value = mr.maps.ints.at(1); value = -value; @@ -3050,6 +3454,20 @@ FormElement* ConditionElement::make_zero_check_generic(const Env& env, } } + { + auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {Matcher::any(0), Matcher::any_integer(1)}), + source_forms.at(0)); + if (mr.matched) { + s64 value = -mr.maps.ints.at(1); + auto value_form = pool.alloc_single_element_form( + nullptr, SimpleAtom::make_int_constant(value)); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), value_form}); + } + } + auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); if (nice_constant) { return pool.alloc_element( @@ -3089,6 +3507,21 @@ FormElement* ConditionElement::make_nonzero_check_generic(const Env& env, std::vector{mr.maps.forms.at(0), value_form}); } + /* + (defmacro logtest? (a b) + "does a have any of the bits in b?" + `(nonzero? (logand ,a ,b)) + ) + */ + auto logand_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::LOGAND), + {Matcher::any(0), Matcher::any(1)}); + auto mr_logand = match(logand_matcher, source_forms.at(0)); + if (mr_logand.matched) { + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::LOGTEST), mr_logand.maps.forms.at(0), + mr_logand.maps.forms.at(1)); + } + return pool.alloc_element(GenericOperator::make_compare(m_kind), source_forms); } @@ -3113,16 +3546,18 @@ FormElement* ConditionElement::make_equal_check_generic(const Env& env, return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::EQ), forms_with_cast); } else { - return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::EQ), - source_forms); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + cast_to_64_bit(source_forms, source_types, pool, env)); } } } -FormElement* ConditionElement::make_not_equal_check_generic(const Env&, - FormPool& pool, - const std::vector& source_forms, - const std::vector&) { +FormElement* ConditionElement::make_not_equal_check_generic( + const Env& env, + FormPool& pool, + const std::vector& source_forms, + const std::vector& source_types) { assert(source_forms.size() == 2); // (!= thing '()) auto ref = source_forms.at(1); @@ -3134,8 +3569,9 @@ FormElement* ConditionElement::make_not_equal_check_generic(const Env&, pool.alloc_single_element_form( nullptr, GenericOperator::make_fixed(FixedOperatorKind::NULLP), source_forms.at(0))); } else { - return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::NEQ), - source_forms); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::NEQ), + cast_to_64_bit(source_forms, source_types, pool, env)); } } @@ -3252,15 +3688,6 @@ FormElement* ConditionElement::make_generic(const Env& env, return make_less_than_zero_signed_check_generic(env, pool, source_forms, types); } - case IR2_Condition::Kind::LEQ_ZERO_SIGNED: { - auto casted = make_casts_if_needed(source_forms, types, TypeSpec("int"), pool, env); - auto zero = pool.alloc_single_element_form( - nullptr, SimpleAtom::make_int_constant(0)); - casted.push_back(zero); - return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::LEQ), - casted); - } - case IR2_Condition::Kind::LESS_THAN_ZERO_UNSIGNED: { auto casted = make_casts_if_needed(source_forms, types, TypeSpec("uint"), pool, env); auto zero = pool.alloc_single_element_form( @@ -3270,6 +3697,15 @@ FormElement* ConditionElement::make_generic(const Env& env, casted); } + case IR2_Condition::Kind::LEQ_ZERO_SIGNED: { + auto casted = make_casts_if_needed(source_forms, types, TypeSpec("int"), pool, env); + auto zero = pool.alloc_single_element_form( + nullptr, SimpleAtom::make_int_constant(0)); + casted.push_back(zero); + return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::LEQ), + casted); + } + case IR2_Condition::Kind::GEQ_ZERO_SIGNED: { return make_geq_zero_signed_check_generic(env, pool, source_forms, types); } @@ -3446,9 +3882,11 @@ void ReturnElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta } std::vector new_entries; - new_entries = rewrite_to_get_var(temp_stack, pool, env.end_var(), env); + std::optional var; + new_entries = rewrite_to_get_var(temp_stack, pool, env.end_var(), env, &var); assert(!new_entries.empty()); + return_code->clear(); for (int i = 0; i < ((int)new_entries.size()) - 1; i++) { @@ -3456,6 +3894,20 @@ void ReturnElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta } return_code->push_back(new_entries.back()); + if (var) { + const auto& func_type = env.func->type.last_arg(); + if (!env.dts->ts.tc(func_type, env.get_variable_type(*var, false))) { + auto as_cast = return_code->try_as_element(); + if (as_cast) { + return_code->clear(); + as_cast->set_type(func_type); + return_code->push_back(as_cast); + } else { + return_code = cast_form(return_code, func_type, pool, env); + return_code->parent_element = this; + } + } + } stack.push_form_element(this, true); } @@ -3797,6 +4249,7 @@ void BranchElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta m_op->to_string(env)); } + assert(!m_op->likely()); auto op = pool.alloc_element(branch_condition, branch_delay, m_op->label_id(), m_op->likely()); // fmt::print("rewrote (non-asm) as {}\n", op->to_string(env)); @@ -4425,17 +4878,22 @@ void LabelElement::push_to_stack(const Env&, FormPool&, FormStack& stack) { void BreakElement::push_to_stack(const Env& env, FormPool& pool, FormStack& stack) { mark_popped(); - FormStack temp_stack(false); for (auto& elt : return_code->elts()) { elt->push_to_stack(env, pool, temp_stack); } - auto new_entries = temp_stack.rewrite(pool, env); + std::vector new_entries; + new_entries = temp_stack.rewrite(pool, env); + + assert(!new_entries.empty()); return_code->clear(); - for (auto e : new_entries) { - return_code->push_back(e); + + for (int i = 0; i < ((int)new_entries.size()); i++) { + stack.push_form_element(new_entries.at(i), true); } + + return_code->push_back(pool.alloc_element()); stack.push_form_element(this, true); } diff --git a/decompiler/IR2/FormStack.cpp b/decompiler/IR2/FormStack.cpp index e2ea9b77ba..7538fd1121 100644 --- a/decompiler/IR2/FormStack.cpp +++ b/decompiler/IR2/FormStack.cpp @@ -349,9 +349,9 @@ std::vector FormStack::rewrite(FormPool& pool, const Env& env) con auto elt = pool.alloc_element(*e.destination, simplified_source, e.sequence_point, type, e.set_info); - e.source->parent_element = elt; auto final_elt = try_rewrites_in_place(elt, env, pool); + simplified_source->parent_element = final_elt; result.push_back(final_elt); } else { result.push_back(e.elt); @@ -411,7 +411,6 @@ std::optional rewrite_to_get_var(std::vector& defa return {}; } else { for (auto x : result) { - x->parent_form = nullptr; default_result.push_back(x); } return result_access; diff --git a/decompiler/IR2/IR2_common.h b/decompiler/IR2/IR2_common.h index 6a302a927c..02ca958296 100644 --- a/decompiler/IR2/IR2_common.h +++ b/decompiler/IR2/IR2_common.h @@ -119,10 +119,16 @@ enum class FixedOperatorKind { FMIN, FMAX, LOGAND, + LOGAND_IN_PLACE, LOGIOR, + LOGIOR_IN_PLACE, LOGXOR, LOGNOR, LOGNOT, + LOGCLEAR, + LOGCLEAR_IN_PLACE, + LOGTEST, + LOGTESTA, SHL, SHR, SAR, @@ -150,6 +156,7 @@ enum class FixedOperatorKind { ASM_MADDS, VECTOR_PLUS, VECTOR_MINUS, + VECTOR_CROSS, VECTOR_FLOAT_PRODUCT, L32_NOT_FALSE_CBOOL, VECTOR_3_DOT, diff --git a/decompiler/IR2/OpenGoalMapping.cpp b/decompiler/IR2/OpenGoalMapping.cpp index 512bda474f..324bf52069 100644 --- a/decompiler/IR2/OpenGoalMapping.cpp +++ b/decompiler/IR2/OpenGoalMapping.cpp @@ -12,7 +12,28 @@ const std::map MIPS_ASM_TO_OPEN_GOAL_FUN {InstructionKind::PSRAW, {".pw.sra", {}}}, {InstructionKind::PSUBW, {".psubw", {}}}, + // Boolean Arithmetic - or / not or / and + {InstructionKind::POR, {".por", {}}}, + {InstructionKind::PNOR, {".pnor", {}}}, + {InstructionKind::PAND, {".pand", {}}}, + + // Parallel Pack + {InstructionKind::PPACH, {".ppach", {}}}, + + // Parallel Compares + {InstructionKind::PCEQB, {".pceqb", {}}}, + // {InstructionKind::PCEQH, {".pceqh", {}}}, + {InstructionKind::PCEQW, {".pceqw", {}}}, + // {InstructionKind::PCGTB, {".pcgtb", {}}}, + // {InstructionKind::PCGTH, {".pcgth", {}}}, + {InstructionKind::PCGTW, {".pcgtw", {}}}, + + // Parallel Extends + {InstructionKind::PEXTUB, {".pextub", {}}}, + {InstructionKind::PEXTUH, {".pextuh", {}}}, {InstructionKind::PEXTUW, {".pextuw", {}}}, + {InstructionKind::PEXTLB, {".pextlb", {}}}, + {InstructionKind::PEXTLH, {".pextlh", {}}}, {InstructionKind::PEXTLW, {".pextlw", {}}}, {InstructionKind::PCPYLD, {".pcpyld", {}}}, {InstructionKind::PCPYUD, {".pcpyud", {}}}, @@ -109,13 +130,11 @@ const std::map MIPS_ASM_TO_OPEN_GOAL_FUN //// Fixed point conversions {InstructionKind::VFTOI0, {".ftoi.vf", {MOD::DEST_MASK}}}, {InstructionKind::VITOF0, {".itof.vf", {MOD::DEST_MASK}}}, - - {InstructionKind::VFTOI4, {"TODO.VFTOI4", {}}}, - - {InstructionKind::VITOF12, {"TODO.VITOF12", {}}}, - {InstructionKind::VFTOI12, {"TODO.VFTOI12", {}}}, - - {InstructionKind::VITOF15, {"TODO.VITOF15", {}}}, + // NOTE - Only the .xyzw mask is supported via macros! + {InstructionKind::VFTOI4, {"vftoi4.xyzw", {MOD::DEST_MASK}}}, + {InstructionKind::VITOF12, {"vitof12.xyzw", {MOD::DEST_MASK}}}, + {InstructionKind::VFTOI12, {"vftoi12.xyzw", {MOD::DEST_MASK}}}, + {InstructionKind::VITOF15, {"vitof15.xyzw", {MOD::DEST_MASK}}}, //// Status Checks {InstructionKind::VCLIP, {"TODO.VCLIP", {}}}, @@ -174,7 +193,7 @@ std::vector OpenGOALAsm::get_args(const std::vector& field_modifications) - : m_type(type), m_base(base), m_field_modifications(field_modifications) { + : m_type(type), + m_base(base), + m_field_modifications(field_modifications), + m_from_pcpyud(from_pcpyud) { m_base->parent_element = this; for (auto& mod : m_field_modifications) { if (mod.value) { @@ -95,13 +100,23 @@ ModifiedCopyBitfieldElement::ModifiedCopyBitfieldElement( } goos::Object ModifiedCopyBitfieldElement::to_form_internal(const Env& env) const { - std::vector result = {pretty_print::to_symbol("copy-and-set-bf")}; - result.push_back(m_base->to_form(env)); - for (auto& def : m_field_modifications) { - result.push_back(pretty_print::to_symbol(fmt::format(":{}", def.field_name))); - result.push_back(def.value->to_form(env)); + if (m_field_modifications.size() == 1) { + std::vector result = {pretty_print::to_symbol("copy-and-set-field")}; + result.push_back(m_base->to_form(env)); + for (auto& def : m_field_modifications) { + result.push_back(pretty_print::to_symbol(fmt::format("{}", def.field_name))); + result.push_back(def.value->to_form(env)); + } + return pretty_print::build_list(result); + } else { + std::vector result = {pretty_print::to_symbol("copy-and-set-bf-multi")}; + result.push_back(m_base->to_form(env)); + for (auto& def : m_field_modifications) { + result.push_back(pretty_print::to_symbol(fmt::format(":{}", def.field_name))); + result.push_back(def.value->to_form(env)); + } + return pretty_print::build_list(result); } - return pretty_print::build_list(result); } void ModifiedCopyBitfieldElement::apply(const std::function& f) { @@ -220,7 +235,8 @@ BitField find_field(const TypeSystem& ts, namespace { std::optional find_field_from_mask(const TypeSystem& ts, const BitFieldType* type, - uint64_t mask) { + uint64_t mask, + bool upper_64) { // try to find a field that is masked by this: auto mask_range = get_bit_range(mask); if (!mask_range) { @@ -228,6 +244,10 @@ std::optional find_field_from_mask(const TypeSystem& ts, return {}; } + if (upper_64) { + mask_range = Range(mask_range->first() + 64, mask_range->last() + 64); + } + return find_field(ts, type, mask_range->first(), mask_range->size(), {}); } @@ -241,7 +261,8 @@ Form* strip_int_or_uint_cast(Form* in) { std::optional get_bitfield_initial_set(Form* form, const BitFieldType* type, - const TypeSystem& ts) { + const TypeSystem& ts, + int offset_in_bitfield) { // (shr (shl arg1 59) 44) for example { auto matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::SHR), @@ -255,7 +276,7 @@ std::optional get_bitfield_initial_set(Form* form, int right = mr.maps.ints.at(2); int size = 64 - left; int offset = left - right; - auto f = find_field(ts, type, offset, size, {}); + auto f = find_field(ts, type, offset + offset_in_bitfield, size, {}); BitFieldDef def; def.value = value; def.field_name = f.name(); @@ -278,7 +299,7 @@ std::optional get_bitfield_initial_set(Form* form, int right = *power_of_two; int size = 64 - left; int offset = left - right; - auto f = find_field(ts, type, offset, size, {}); + auto f = find_field(ts, type, offset + offset_in_bitfield, size, {}); BitFieldDef def; def.value = value; def.field_name = f.name(); @@ -298,7 +319,7 @@ std::optional get_bitfield_initial_set(Form* form, int right = 0; int size = 64 - left; int offset = left - right; - auto f = find_field(ts, type, offset, size, {}); + auto f = find_field(ts, type, offset + offset_in_bitfield, size, {}); BitFieldDef def; def.value = value; def.field_name = f.name(); @@ -313,7 +334,7 @@ std::optional get_bitfield_initial_set(Form* form, auto value = mr_sllv.maps.forms.at(0); int size = 32; int offset = 0; - auto f = find_field(ts, type, offset, size, {}); + auto f = find_field(ts, type, offset + offset_in_bitfield, size, {}); BitFieldDef def; def.value = value; def.field_name = f.name(); @@ -345,6 +366,19 @@ void BitfieldAccessElement::push_pcpyud(const TypeSystem& ts, FormPool& pool, co } } +std::string BitfieldAccessElement::debug_print(const Env& env) const { + std::string result = "BitfieldAccessElement:"; + if (m_got_pcpyud) { + result += "pcpyud"; + } + result += '\n'; + result += fmt::format("base: {}\n", m_base->to_string(env)); + for (auto& step : m_steps) { + result += fmt::format(" {}\n", step.print()); + } + return result; +} + /*! * Add a step to the bitfield access. If this completes the access, returns a form representing the * access @@ -434,9 +468,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, if (m_steps.empty() && step.kind == BitfieldManip::Kind::LOGAND_WITH_CONSTANT_INT) { // and with mask - if (m_got_pcpyud) { - throw std::runtime_error("unknown pcpyud LOGAND_WITH_CONSTANT_INT sequence in bitfield"); - } + // no need to do anything with pcpyud here. m_steps.push_back(step); return nullptr; } @@ -449,7 +481,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, auto type = ts.lookup_type(m_type); auto as_bitfield = dynamic_cast(type); assert(as_bitfield); - auto field = find_field_from_mask(ts, as_bitfield, m_steps.at(0).amount); + auto field = find_field_from_mask(ts, as_bitfield, m_steps.at(0).amount, false); // todo PCPYUP if (field) { auto get_field = pool.alloc_element(m_base, false, DerefToken::make_field_name(field->name())); @@ -462,9 +494,6 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, if (m_steps.size() == 1 && m_steps.at(0).kind == BitfieldManip::Kind::LOGAND_WITH_CONSTANT_INT && step.kind == BitfieldManip::Kind::LOGIOR_WITH_CONSTANT_INT) { - if (m_got_pcpyud) { - throw std::runtime_error("unknown pcpyud LOGIOR_WITH_CONSTANT_INT sequence in bitfield"); - } // this is setting a bitfield to a constant. // first, let's check that the mask is used properly: u64 mask = m_steps.at(0).amount; @@ -477,7 +506,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, 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); + auto field = find_field_from_mask(ts, as_bitfield, ~mask, m_got_pcpyud); assert(field); bool is_signed = ts.tc(TypeSpec("int"), field->type()) && !ts.tc(TypeSpec("uint"), field->type()); @@ -485,24 +514,21 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, // use the field to figure out what value is being set. u64 set_value; if (is_signed) { - set_value = extract_bitfield(value, field->offset(), field->size()); + set_value = extract_bitfield(value, field->offset() - pcpyud_offset, field->size()); } else { - set_value = extract_bitfield(value, field->offset(), field->size()); + set_value = extract_bitfield(value, field->offset() - pcpyud_offset, field->size()); } BitFieldDef def; def.field_name = field->name(); def.value = pool.alloc_single_element_form( nullptr, SimpleAtom::make_int_constant(set_value)); - return pool.alloc_element(m_type, m_base, + return pool.alloc_element(m_type, m_base, m_got_pcpyud, std::vector{def}); } if (m_steps.size() == 1 && m_steps.at(0).kind == BitfieldManip::Kind::LOGAND_WITH_CONSTANT_INT && step.kind == BitfieldManip::Kind::LOGIOR_WITH_FORM) { - if (m_got_pcpyud) { - throw std::runtime_error("unknown pcpyud LOGIOR_WITH_FORM sequence in bitfield"); - } // this is setting a bitfield to a variable u64 mask = m_steps.at(0).amount; @@ -510,10 +536,10 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, 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); + auto field = find_field_from_mask(ts, as_bitfield, ~mask, m_got_pcpyud); assert(field); - auto val = get_bitfield_initial_set(step.value, as_bitfield, ts); + auto val = get_bitfield_initial_set(step.value, as_bitfield, ts, pcpyud_offset); if (!val) { throw std::runtime_error( @@ -524,7 +550,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, throw std::runtime_error("Incompatible bitfield set"); } - return pool.alloc_element(m_type, m_base, + return pool.alloc_element(m_type, m_base, m_got_pcpyud, std::vector{*val}); } @@ -532,7 +558,10 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, for (auto& old_step : m_steps) { lg::error(" {}", old_step.print()); } - lg::error("Current: {}\n", step.print()); + lg::error("Current: {}", step.print()); + if (m_got_pcpyud) { + lg::error("Got pcpyud\n"); + } throw std::runtime_error("Unknown state in BitfieldReadElement"); } @@ -595,6 +624,22 @@ std::optional get_goal_integer_constant(Form* in, const Env&) { return result; } } + + // also (shl (shl 16) 32) + // why. + matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::SHL), + {Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::SHL), + {Matcher::any(1), Matcher::integer(16)}), + Matcher::integer(32)}); + mr = match(matcher, in); + if (mr.matched) { + auto arg_as_atom = form_as_atom(mr.maps.forms.at(1)); + if (arg_as_atom && arg_as_atom->is_int()) { + u64 result = arg_as_atom->get_int(); + result <<= 48ull; + return result; + } + } return {}; } @@ -602,7 +647,14 @@ BitFieldDef BitFieldDef::from_constant(const BitFieldConstantDef& constant, Form BitFieldDef bfd; bfd.field_name = constant.field_name; bfd.is_signed = constant.is_signed; - if (constant.enum_constant) { + if (constant.nested_field) { + std::vector defs; + for (auto& x : constant.nested_field->fields) { + defs.push_back(BitFieldDef::from_constant(x, pool)); + } + bfd.value = pool.alloc_single_element_form( + nullptr, constant.nested_field->field_type, defs); + } else if (constant.enum_constant) { bfd.value = pool.alloc_single_element_form(nullptr, *constant.enum_constant); } else { @@ -625,8 +677,8 @@ Form* cast_sound_name(FormPool& pool, const Env& env, Form* in) { auto hi = mr.maps.forms.at(1); auto lo = mr.maps.forms.at(0); - auto hi_int = get_goal_integer_constant(hi, env); - auto lo_int = get_goal_integer_constant(lo, env); + auto hi_int = get_goal_integer_constant(strip_int_or_uint_cast(hi), env); + auto lo_int = get_goal_integer_constant(strip_int_or_uint_cast(lo), env); if (!hi_int || !lo_int) { return nullptr; } @@ -713,8 +765,9 @@ Form* cast_to_bitfield(const BitFieldType* type_info, // now variables for (auto& arg : args) { + // it's a 64-bit constant so correct to set offset 0 here. auto maybe_field = - get_bitfield_initial_set(strip_int_or_uint_cast(arg), type_info, env.dts->ts); + get_bitfield_initial_set(strip_int_or_uint_cast(arg), type_info, env.dts->ts, 0); if (!maybe_field) { // failed, just return cast. return pool.alloc_single_element_form(nullptr, typespec, in); diff --git a/decompiler/IR2/bitfields.h b/decompiler/IR2/bitfields.h index 1ae1b8f09d..8715378b67 100644 --- a/decompiler/IR2/bitfields.h +++ b/decompiler/IR2/bitfields.h @@ -101,6 +101,8 @@ class BitfieldAccessElement : public FormElement { FormPool& pool, const Env& env); 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; } private: bool m_got_pcpyud = false; @@ -155,6 +157,7 @@ class ModifiedCopyBitfieldElement : public FormElement { public: ModifiedCopyBitfieldElement(const TypeSpec& type, Form* base, + bool from_pcpyud, const std::vector& field_modifications); goos::Object to_form_internal(const Env& env) const override; void apply(const std::function& f) override; @@ -164,11 +167,17 @@ class ModifiedCopyBitfieldElement : public FormElement { Form* base() const { return m_base; } const std::vector mods() const { return m_field_modifications; } + bool from_pcpyud() const { return m_from_pcpyud; } + void clear_pcpyud_flag() { + assert(m_from_pcpyud); + m_from_pcpyud = false; + } private: TypeSpec m_type; Form* m_base = nullptr; std::vector m_field_modifications; + bool m_from_pcpyud = false; }; Form* cast_to_bitfield(const BitFieldType* type_info, diff --git a/decompiler/ObjectFile/LinkedObjectFile.cpp b/decompiler/ObjectFile/LinkedObjectFile.cpp index cb8e8f12b9..91230bf532 100644 --- a/decompiler/ObjectFile/LinkedObjectFile.cpp +++ b/decompiler/ObjectFile/LinkedObjectFile.cpp @@ -961,4 +961,4 @@ const DecompilerLabel& LinkedObjectFile::get_label_by_name(const std::string& na } throw std::runtime_error("Cannot find label " + name); } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index ab6782faa1..b36b13b085 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -157,7 +157,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, lg::info("ObjectFileDB Initialized\n"); if (obj_files_by_name.empty()) { - lg::die( + lg::error( "No object files have been added. Check that there are input files and the allowed_objects " "list."); } @@ -580,6 +580,7 @@ std::string ObjectFileDB::process_tpages() { if (tpage_dir_count == 0) { lg::warn("Did not find tpage-dir."); + return {}; } lg::info("Processed {} / {} textures {:.2f}% in {:.2f} ms", success, total, @@ -612,6 +613,9 @@ std::string ObjectFileDB::process_game_text_files() { lg::info("Processed {} text files ({} strings, {} characters) in {:.2f} ms", file_count, string_count, char_count, timer.getMs()); + if (text_by_language_by_id.empty()) { + return {}; + } return write_game_text(text_by_language_by_id); } diff --git a/decompiler/ObjectFile/ObjectFileDB.h b/decompiler/ObjectFile/ObjectFileDB.h index b4e842749e..96a4f44ee3 100644 --- a/decompiler/ObjectFile/ObjectFileDB.h +++ b/decompiler/ObjectFile/ObjectFileDB.h @@ -63,7 +63,9 @@ class ObjectFileDB { bool print_hex); void analyze_functions_ir1(const Config& config); - void analyze_functions_ir2(const std::string& output_dir, const Config& config); + void analyze_functions_ir2(const std::string& output_dir, + const Config& config, + bool skip_debug_output = false); void ir2_top_level_pass(const Config& config); void ir2_stack_spill_slot_pass(); void ir2_basic_block_pass(const Config& config); diff --git a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp index 01280eb11d..c48d2265e5 100644 --- a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp +++ b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp @@ -30,7 +30,9 @@ namespace decompiler { * At this point, we assume that the files are loaded and we've run find_code to locate all * functions, but nothing else. */ -void ObjectFileDB::analyze_functions_ir2(const std::string& output_dir, const Config& config) { +void ObjectFileDB::analyze_functions_ir2(const std::string& output_dir, + const Config& config, + bool skip_debug_output) { lg::info("Using IR2 analysis..."); lg::info("Processing top-level functions..."); ir2_top_level_pass(config); @@ -55,8 +57,11 @@ void ObjectFileDB::analyze_functions_ir2(const std::string& output_dir, const Co lg::info("Initial structuring..."); ir2_cfg_build_pass(); - lg::info("Storing temporary form result..."); - ir2_store_current_forms(); + if (!skip_debug_output) { + lg::info("Storing temporary form result..."); + ir2_store_current_forms(); + } + lg::info("Expression building..."); ir2_build_expressions(config); lg::info("Re-writing inline asm instructions..."); @@ -301,8 +306,17 @@ void ObjectFileDB::ir2_atomic_op_pass(const Config& config) { bool inline_asm = config.hacks.hint_inline_assembly_functions.find(func.guessed_name.to_string()) != config.hacks.hint_inline_assembly_functions.end(); + + std::unordered_set blocks_ending_in_asm_branch; + auto asm_branch_it = config.hacks.blocks_ending_in_asm_branch_by_func_name.find( + func.guessed_name.to_string()); + + if (asm_branch_it != config.hacks.blocks_ending_in_asm_branch_by_func_name.end()) { + blocks_ending_in_asm_branch = asm_branch_it->second; + } + auto ops = convert_function_to_atomic_ops(func, data.linked_data.labels, func.warnings, - inline_asm); + inline_asm, blocks_ending_in_asm_branch); func.ir2.atomic_ops = std::make_shared(std::move(ops)); func.ir2.atomic_ops_succeeded = true; func.ir2.env.set_end_var(func.ir2.atomic_ops->end_op().return_var()); @@ -610,7 +624,12 @@ void ObjectFileDB::ir2_insert_anonymous_functions() { (void)segment_id; (void)data; if (func.ir2.top_form && func.ir2.env.has_type_analysis()) { - total += insert_static_refs(func.ir2.top_form, *func.ir2.form_pool, func, dts); + try { + total += insert_static_refs(func.ir2.top_form, *func.ir2.form_pool, func, dts); + } catch (std::exception& e) { + func.warnings.general_warning("Failed static ref finding: {}\n", e.what()); + lg::error("Function {} failed static ref: {}\n", func.guessed_name.to_string(), e.what()); + } } }); diff --git a/decompiler/analysis/atomic_op_builder.cpp b/decompiler/analysis/atomic_op_builder.cpp index 7fcbf3fdcf..98f9a50065 100644 --- a/decompiler/analysis/atomic_op_builder.cpp +++ b/decompiler/analysis/atomic_op_builder.cpp @@ -11,7 +11,10 @@ namespace decompiler { namespace { -std::unique_ptr convert_1(const Instruction& i0, int idx, bool hint_inline_asm); +std::unique_ptr convert_1(const Instruction& i0, + int idx, + bool hint_inline_asm, + bool force_asm_branch); ////////////////////// // Register Helpers @@ -364,7 +367,9 @@ std::unique_ptr make_asm_op(const Instruction& i0, int idx) { } std::unique_ptr convert_1_allow_asm(const Instruction& i0, int idx) { - auto as_normal = convert_1(i0, idx, false); + // only used for delay slots, so fine to assume that this can never be an asm branch itself + // as there are no branches in delay slots anywhere. + auto as_normal = convert_1(i0, idx, false, false); if (as_normal) { return as_normal; } @@ -426,15 +431,6 @@ std::unique_ptr make_branch(const IR2_Condition& condition, } } -std::unique_ptr make_branch_no_delay(const IR2_Condition& condition, - bool likely, - int dest_label, - int my_idx) { - assert(likely); - IR2_BranchDelay delay(IR2_BranchDelay::Kind::NO_DELAY); - return std::make_unique(likely, condition, dest_label, delay, my_idx); -} - std::unique_ptr make_asm_branch_no_delay(const IR2_Condition& condition, bool likely, int dest_label, @@ -443,6 +439,19 @@ std::unique_ptr make_asm_branch_no_delay(const IR2_Condition& conditio return std::make_unique(likely, condition, dest_label, nullptr, my_idx); } +std::unique_ptr make_branch_no_delay(const IR2_Condition& condition, + bool likely, + int dest_label, + int my_idx, + bool force_asm_branch) { + if (force_asm_branch) { + return make_asm_branch_no_delay(condition, likely, dest_label, my_idx); + } + assert(likely); + IR2_BranchDelay delay(IR2_BranchDelay::Kind::NO_DELAY); + return std::make_unique(likely, condition, dest_label, delay, my_idx); +} + std::unique_ptr make_asm_branch(const IR2_Condition& condition, const Instruction& delay, bool likely, @@ -532,7 +541,8 @@ std::unique_ptr convert_mfc1_1(const Instruction& i0, int idx) { } std::unique_ptr convert_lw_1(const Instruction& i0, int idx) { - if (i0.get_dst(0).is_reg(rra()) || i0.get_dst(0).is_reg(make_gpr(Reg::AT))) { + if (i0.get_dst(0).is_reg(rra()) || + (i0.get_dst(0).is_reg(make_gpr(Reg::AT)) && !i0.get_src(1).is_reg(rs7()))) { return std::make_unique(i0, idx); } if (i0.get_dst(0).is_reg(rr0()) && i0.get_src(0).is_imm(2) && i0.get_src(1).is_reg(rr0())) { @@ -705,12 +715,16 @@ std::unique_ptr convert_dsrl32_1(const Instruction& i0, int idx) { std::unique_ptr convert_likely_branch_1(const Instruction& i0, IR2_Condition::Kind kind, bool likely, - int idx) { + int idx, + bool force_asm) { return make_branch_no_delay(IR2_Condition(kind, make_src_atom(i0.get_src(0).get_reg(), idx)), - likely, i0.get_src(1).get_label(), idx); + likely, i0.get_src(1).get_label(), idx, force_asm); } -std::unique_ptr convert_beql_1(const Instruction& i0, int idx, bool likely) { +std::unique_ptr convert_beql_1(const Instruction& i0, + int idx, + 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(); @@ -735,10 +749,13 @@ std::unique_ptr convert_beql_1(const Instruction& i0, int idx, bool li IR2_Condition(IR2_Condition::Kind::EQUAL, make_src_atom(s0, idx), make_src_atom(s1, idx)); condition.make_flipped(); } - return make_branch_no_delay(condition, likely, dest, idx); + return make_branch_no_delay(condition, likely, dest, idx, force_asm); } -std::unique_ptr convert_bnel_1(const Instruction& i0, int idx, bool likely) { +std::unique_ptr convert_bnel_1(const Instruction& i0, + int idx, + 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(); @@ -756,7 +773,7 @@ std::unique_ptr convert_bnel_1(const Instruction& i0, int idx, bool li make_src_atom(s1, idx)); condition.make_flipped(); } - return make_branch_no_delay(condition, likely, dest, idx); + return make_branch_no_delay(condition, likely, dest, idx, force_asm); } std::unique_ptr convert_subu_1(const Instruction& i0, int idx) { @@ -771,7 +788,10 @@ std::unique_ptr convert_subu_1(const Instruction& i0, int idx) { } } -std::unique_ptr convert_1(const Instruction& i0, int idx, bool hint_inline_asm) { +std::unique_ptr convert_1(const Instruction& i0, + int idx, + bool hint_inline_asm, + bool force_asm_branch) { switch (i0.kind) { case InstructionKind::OR: return convert_or_1(i0, idx); @@ -895,15 +915,18 @@ std::unique_ptr convert_1(const Instruction& i0, int idx, bool hint_in case InstructionKind::MOVZ: return convert_cmov_1(i0, idx); case InstructionKind::BGTZL: - return convert_likely_branch_1(i0, IR2_Condition::Kind::GREATER_THAN_ZERO_SIGNED, true, idx); + return convert_likely_branch_1(i0, IR2_Condition::Kind::GREATER_THAN_ZERO_SIGNED, true, idx, + force_asm_branch); case InstructionKind::BGEZL: - return convert_likely_branch_1(i0, IR2_Condition::Kind::GEQ_ZERO_SIGNED, true, idx); + return convert_likely_branch_1(i0, IR2_Condition::Kind::GEQ_ZERO_SIGNED, true, idx, + force_asm_branch); case InstructionKind::BLTZL: - return convert_likely_branch_1(i0, IR2_Condition::Kind::LESS_THAN_ZERO_SIGNED, true, idx); + return convert_likely_branch_1(i0, IR2_Condition::Kind::LESS_THAN_ZERO_SIGNED, true, idx, + force_asm_branch); case InstructionKind::BEQL: - return convert_beql_1(i0, idx, true); + return convert_beql_1(i0, idx, true, force_asm_branch); case InstructionKind::BNEL: - return convert_bnel_1(i0, idx, true); + return convert_bnel_1(i0, idx, true, force_asm_branch); case InstructionKind::SUBU: return convert_subu_1(i0, idx); // may fail default: @@ -1469,6 +1492,26 @@ std::unique_ptr convert_dsll32_4(const Instruction& i0, return nullptr; } +std::unique_ptr convert_fp_branch_with_nop(const Instruction& i0, + const Instruction& i1, + const Instruction& i2, + const Instruction& i3, + IR2_Condition::Kind kind, + int idx) { + if (i1.kind != InstructionKind::VNOP) { + return nullptr; + } + if (i2.kind == InstructionKind::BC1T || i2.kind == InstructionKind::BC1F) { + IR2_Condition condition(kind, make_src_atom(i0.get_src(0).get_reg(), idx), + make_src_atom(i0.get_src(1).get_reg(), idx)); + if (i2.kind == InstructionKind::BC1F) { + condition.invert(); + } + return make_branch(condition, i3, false, i2.get_src(0).get_label(), idx); + } + return nullptr; +} + std::unique_ptr convert_4(const Instruction& i0, const Instruction& i1, const Instruction& i2, @@ -1477,6 +1520,8 @@ std::unique_ptr convert_4(const Instruction& i0, switch (i0.kind) { case InstructionKind::DSLL32: return convert_dsll32_4(i0, i1, i2, i3, idx); + case InstructionKind::CEQS: + return convert_fp_branch_with_nop(i0, i1, i2, i3, IR2_Condition::Kind::FLOAT_EQUAL, idx); default: return nullptr; } @@ -1580,6 +1625,53 @@ std::unique_ptr convert_vector_minus(const Instruction& i0, idx); } +std::unique_ptr convert_vector_cross(const Instruction& i0, + const Instruction& i1, + const Instruction& i2, + const Instruction& i3, + const Instruction& i4, + int idx) { + // lqc2 vf1, 0(v1) (src1) + if (i0.kind != InstructionKind::LQC2 || i0.get_dst(0).get_reg() != make_vf(1) || + !i0.get_src(0).is_imm(0)) { + return nullptr; + } + Register src1 = i0.get_src(1).get_reg(); + + // lqc2 vf5, 0(a2) (src2) + if (i1.kind != InstructionKind::LQC2 || i1.get_dst(0).get_reg() != make_vf(2) || + !i1.get_src(0).is_imm(0)) { + return nullptr; + } + Register src2 = i1.get_src(1).get_reg(); + + // vopmula.xyz acc, vf1, vf2 + if (i2.kind != InstructionKind::VOPMULA || i2.get_src(0).get_reg() != make_vf(1) || + i2.get_src(1).get_reg() != make_vf(2) || i2.cop2_dest != 14) { + return nullptr; + } + + // vopmsub.xyz vf3, vf2, vf1 + if (i3.kind != InstructionKind::VOPMSUB || i3.get_dst(0).get_reg() != make_vf(3) || + i3.get_src(0).get_reg() != make_vf(2) || i3.get_src(1).get_reg() != make_vf(1) || + i3.cop2_dest != 14) { + return nullptr; + } + + // sqc2 vf3, 0(a0) + if (i4.kind != InstructionKind::SQC2 || i4.get_src(0).get_reg() != make_vf(3) || + !i4.get_src(1).is_imm(0)) { + return nullptr; + } + Register dst = i4.get_src(2).get_reg(); + + return std::make_unique( + make_dst_var(dst, idx), + SimpleExpression(SimpleExpression::Kind::VECTOR_CROSS, make_src_atom(dst, idx), + make_src_atom(src1, idx), make_src_atom(src2, idx)), + idx); +} + std::unique_ptr convert_5(const Instruction& i0, const Instruction& i1, const Instruction& i2, @@ -1607,6 +1699,11 @@ std::unique_ptr convert_5(const Instruction& i0, if (as_vector_minus) { return as_vector_minus; } + + auto as_vector_cross = convert_vector_cross(i0, i1, i2, i3, i4, idx); + if (as_vector_cross) { + return as_vector_cross; + } return nullptr; } @@ -1787,7 +1884,8 @@ int convert_block_to_atomic_ops(int begin_idx, const std::vector& labels, FunctionAtomicOps* container, DecompWarnings& warnings, - bool hint_inline_asm) { + bool hint_inline_asm, + bool block_ends_in_asm_branch) { container->block_id_to_first_atomic_op.push_back(container->ops.size()); for (auto& instr = begin; instr < end;) { // how many instructions can we look at, at most? @@ -1859,7 +1957,8 @@ int convert_block_to_atomic_ops(int begin_idx, if (!converted) { // try 1 instruction - op = convert_1(*instr, op_idx, hint_inline_asm); + bool force_asm_branch = n_instr == 1 && block_ends_in_asm_branch; + op = convert_1(*instr, op_idx, hint_inline_asm, force_asm_branch); if (op) { converted = true; length = 1; @@ -1899,10 +1998,12 @@ int convert_block_to_atomic_ops(int begin_idx, return int(container->ops.size()); } -FunctionAtomicOps convert_function_to_atomic_ops(const Function& func, - const std::vector& labels, - DecompWarnings& warnings, - bool hint_inline_asm) { +FunctionAtomicOps convert_function_to_atomic_ops( + const Function& func, + const std::vector& labels, + DecompWarnings& warnings, + bool hint_inline_asm, + const std::unordered_set& blocks_ending_in_asm_branches) { FunctionAtomicOps result; int last_op = 0; @@ -1912,8 +2013,9 @@ FunctionAtomicOps convert_function_to_atomic_ops(const Function& func, if (block.end_word > block.start_word) { auto begin = func.instructions.begin() + block.start_word; auto end = func.instructions.begin() + block.end_word; - last_op = convert_block_to_atomic_ops(block.start_word, begin, end, labels, &result, warnings, - hint_inline_asm); + last_op = convert_block_to_atomic_ops( + block.start_word, begin, end, labels, &result, warnings, hint_inline_asm, + blocks_ending_in_asm_branches.find(i) != blocks_ending_in_asm_branches.end()); if (i == int(func.basic_blocks.size()) - 1) { // we're the last block. insert the function end op. result.ops.push_back(std::make_unique(int(result.ops.size()))); diff --git a/decompiler/analysis/atomic_op_builder.h b/decompiler/analysis/atomic_op_builder.h index 4858deafc3..9b2281efcd 100644 --- a/decompiler/analysis/atomic_op_builder.h +++ b/decompiler/analysis/atomic_op_builder.h @@ -48,13 +48,16 @@ int convert_block_to_atomic_ops(int begin_idx, const std::vector& labels, FunctionAtomicOps* container, DecompWarnings& warnings, - bool inline_asm_hint = false); + bool inline_asm_hint = false, + bool block_ends_in_asm_branch = false); /*! * Convert an entire function to AtomicOps */ -FunctionAtomicOps convert_function_to_atomic_ops(const Function& func, - const std::vector& labels, - DecompWarnings& warnings, - bool hint_inline_asm); +FunctionAtomicOps convert_function_to_atomic_ops( + const Function& func, + const std::vector& labels, + DecompWarnings& warnings, + bool hint_inline_asm, + const std::unordered_set& blocks_ending_in_asm_branches); } // namespace decompiler \ No newline at end of file diff --git a/decompiler/analysis/cfg_builder.cpp b/decompiler/analysis/cfg_builder.cpp index a10a021d0e..ea26ee76f1 100644 --- a/decompiler/analysis/cfg_builder.cpp +++ b/decompiler/analysis/cfg_builder.cpp @@ -611,7 +611,14 @@ bool try_splitting_nested_sc(FormPool& pool, Function& func, ShortCircuitElement * if there is a case like (and a (or b c)) */ void clean_up_sc(FormPool& pool, Function& func, ShortCircuitElement* ir) { - assert(ir->entries.size() > 1); + assert(ir->entries.size() > 0); + if (ir->entries.size() == 1) { + // need to fake the final entry. + ShortCircuitElement::Entry empty_final; + empty_final.condition = pool.alloc_single_element_form(ir); + ir->entries.push_back(empty_final); + } + if (!try_clean_up_sc_as_and(pool, func, ir)) { if (!try_clean_up_sc_as_or(pool, func, ir)) { if (!try_splitting_nested_sc(pool, func, ir)) { @@ -1615,9 +1622,6 @@ Form* cfg_to_ir_helper(FormPool& pool, Function& f, const CfgVtx* vtx) { return as_abs; } - if (svtx->entries.size() == 1) { - throw std::runtime_error("Weird short circuit form."); - } // now try as a normal and/or std::vector entries; for (auto& x : svtx->entries) { diff --git a/decompiler/analysis/expression_build.cpp b/decompiler/analysis/expression_build.cpp index aa9b637935..97e495db5f 100644 --- a/decompiler/analysis/expression_build.cpp +++ b/decompiler/analysis/expression_build.cpp @@ -85,10 +85,15 @@ bool convert_to_expressions( if (!dts.ts.tc(f.type.last_arg(), return_type)) { // we need to cast the final value. auto to_cast = new_entries.back(); - new_entries.pop_back(); - auto cast = pool.alloc_element(f.type.last_arg(), - pool.alloc_single_form(nullptr, to_cast)); - new_entries.push_back(cast); + auto as_cast = dynamic_cast(to_cast); + if (as_cast) { + as_cast->set_type(f.type.last_arg()); + } else { + new_entries.pop_back(); + auto cast = pool.alloc_element(f.type.last_arg(), + pool.alloc_single_form(nullptr, to_cast)); + new_entries.push_back(cast); + } } } else { // or just get all the expressions diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index aba26c6830..0b72781275 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -36,7 +36,7 @@ If the previous let variables appear in the definition of new one, make the let */ namespace { -std::vector path_up_tree(Form* in, const Env& env) { +std::vector path_up_tree(Form* in, const Env&) { std::vector path; while (in) { @@ -79,8 +79,8 @@ Form* lca_form(Form* a, Form* b, const Env& env) { bi--; } if (!result) { - auto* bad = b->parent_element; - fmt::print("bad form is {} {}\n", bad->to_string(env), (void*)bad); + fmt::print("{} bad form is {}\n\n{}\n", env.func->guessed_name.to_string(), a->to_string(env), + b->to_string(env)); } assert(result); @@ -357,6 +357,265 @@ FormElement* rewrite_empty_let(LetElement* in, const Env&, FormPool&) { return in->entries().at(0).src->try_as_single_element(); } +Form* strip_truthy(Form* in) { + auto as_ge = in->try_as_element(); + if (as_ge) { + if (as_ge->op().kind() == GenericOperator::Kind::CONDITION_OPERATOR && + as_ge->op().condition_kind() == IR2_Condition::Kind::TRUTHY) { + in = as_ge->elts().at(0); + } + } + return in; +} + +FormElement* rewrite_set_vector(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto in_vec = env.get_variable_name(in->entries().at(0).dest); + + auto& body_elts = in->body()->elts(); + if (body_elts.size() != 4) { + return nullptr; + } + + std::vector sources; + for (int i = 0; i < 4; i++) { + auto elt_as_form_form = dynamic_cast(body_elts.at(i)); + if (!elt_as_form_form) { + return nullptr; + } + auto dst = elt_as_form_form->dst(); + sources.push_back(elt_as_form_form->src()); + Matcher dst_matcher = Matcher::deref(Matcher::any_reg(0), false, + {DerefTokenMatcher::string(std::string(1, "xyzw"[i]))}); + auto mr = match(dst_matcher, dst); + if (!mr.matched) { + return nullptr; + } + if (in_vec != env.get_variable_name(*mr.maps.regs.at(0))) { + return nullptr; + } + } + + std::vector args; + args.push_back(in->entries().at(0).src); + for (auto& src : sources) { + args.push_back(src); + } + + auto op = GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "set-vector!")); + return pool.alloc_element(op, args); +} + +FormElement* rewrite_set_vector_2(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto in_vec = env.get_variable_name(in->entries().at(0).dest); + auto src_as_deref = in->entries().at(0).src->try_as_element(); + if (!src_as_deref) { + return nullptr; + } + + auto& body_elts = in->body()->elts(); + if (body_elts.size() != 4) { + return nullptr; + } + + std::vector sources; + for (int i = 0; i < 4; i++) { + auto elt_as_form_form = dynamic_cast(body_elts.at(i)); + if (!elt_as_form_form) { + return nullptr; + } + auto dst = elt_as_form_form->dst(); + sources.push_back(elt_as_form_form->src()); + Matcher dst_matcher = Matcher::deref( + Matcher::any_reg(0), false, + {DerefTokenMatcher::integer(0), DerefTokenMatcher::string(std::string(1, "xyzw"[i]))}); + auto mr = match(dst_matcher, dst); + if (!mr.matched) { + return nullptr; + } + if (in_vec != env.get_variable_name(*mr.maps.regs.at(0))) { + return nullptr; + } + } + + src_as_deref->tokens().push_back(DerefToken::make_int_constant(0)); + + std::vector args; + args.push_back(in->entries().at(0).src); + for (auto& src : sources) { + args.push_back(src); + } + + auto op = GenericOperator::make_function( + pool.alloc_single_element_form(nullptr, "set-vector!")); + return pool.alloc_element(op, args); +} + +ShortCircuitElement* get_or(Form* in) { + // strip off truthy + in = strip_truthy(in); + + return in->try_as_element(); +} + +FormElement* rewrite_as_case_no_else(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto* cond = in->body()->try_as_element(); + if (!cond) { + return nullptr; + } + + auto case_var = in->entries().at(0).dest; + auto& case_var_uses = env.get_use_def_info(case_var); + int found_uses = 0; + if (case_var_uses.def_count() != 1) { + return nullptr; + } + auto case_var_name = env.get_variable_name(case_var); + + std::vector entries; + + for (auto& e : cond->entries) { + // first, lets see if its just (= case_var ) + auto single_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::EQ), + {Matcher::any_reg(0), Matcher::any(1)}); + + auto single_matcher_result = match(single_matcher, e.condition); + + Form* single_value = nullptr; + if (single_matcher_result.matched) { + auto var_name = env.get_variable_name(*single_matcher_result.maps.regs.at(0)); + if (var_name == case_var_name) { + single_value = single_matcher_result.maps.forms.at(1); + } + } + + if (single_value) { + entries.push_back({{single_value}, e.body}); + found_uses++; + continue; + } + + // try as an or (or (= case_var ) ...) + auto* as_or = get_or(e.condition); + if (!as_or) { + return nullptr; + } + + CaseElement::Entry current_entry; + for (auto& or_case : as_or->entries) { + auto or_single_matcher_result = match(single_matcher, strip_truthy(or_case.condition)); + if (!or_single_matcher_result.matched) { + return nullptr; + } + auto var_name = env.get_variable_name(*or_single_matcher_result.maps.regs.at(0)); + if (var_name != case_var_name) { + return nullptr; + } + found_uses++; + current_entry.vals.push_back(or_single_matcher_result.maps.forms.at(1)); + } + current_entry.body = e.body; + entries.push_back(current_entry); + + // no match + // return nullptr; + } + + if (found_uses != case_var_uses.use_count()) { + return nullptr; + } + + return pool.alloc_element(in->entries().at(0).src, entries, nullptr); + return nullptr; +} + +FormElement* rewrite_as_case_with_else(LetElement* in, const Env& env, FormPool& pool) { + if (in->entries().size() != 1) { + return nullptr; + } + + auto* cond = in->body()->try_as_element(); + if (!cond) { + return nullptr; + } + + auto case_var = in->entries().at(0).dest; + auto& case_var_uses = env.get_use_def_info(case_var); + int found_uses = 0; + if (case_var_uses.def_count() != 1) { + return nullptr; + } + auto case_var_name = env.get_variable_name(case_var); + + std::vector entries; + + for (auto& e : cond->entries) { + // first, lets see if its just (= case_var ) + auto single_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::EQ), + {Matcher::any_reg(0), Matcher::any(1)}); + + auto single_matcher_result = match(single_matcher, e.condition); + + Form* single_value = nullptr; + if (single_matcher_result.matched) { + auto var_name = env.get_variable_name(*single_matcher_result.maps.regs.at(0)); + if (var_name == case_var_name) { + single_value = single_matcher_result.maps.forms.at(1); + } + } + + if (single_value) { + entries.push_back({{single_value}, e.body}); + found_uses++; + continue; + } + + // try as an or (or (= case_var ) ...) + auto* as_or = get_or(e.condition); + if (!as_or) { + return nullptr; + } + + CaseElement::Entry current_entry; + for (auto& or_case : as_or->entries) { + auto or_single_matcher_result = match(single_matcher, strip_truthy(or_case.condition)); + if (!or_single_matcher_result.matched) { + return nullptr; + } + auto var_name = env.get_variable_name(*or_single_matcher_result.maps.regs.at(0)); + if (var_name != case_var_name) { + return nullptr; + } + found_uses++; + current_entry.vals.push_back(or_single_matcher_result.maps.forms.at(1)); + } + current_entry.body = e.body; + entries.push_back(current_entry); + + // no match + // return nullptr; + } + + if (found_uses != case_var_uses.use_count()) { + return nullptr; + } + + return pool.alloc_element(in->entries().at(0).src, entries, cond->else_ir); + return nullptr; +} + /*! * Attempt to rewrite a let as another form. If it cannot be rewritten, this will return nullptr. */ @@ -386,6 +645,26 @@ FormElement* rewrite_let(LetElement* in, const Env& env, FormPool& pool) { return as_unused; } + auto as_case_no_else = rewrite_as_case_no_else(in, env, pool); + if (as_case_no_else) { + return as_case_no_else; + } + + auto as_case_with_else = rewrite_as_case_with_else(in, env, pool); + if (as_case_with_else) { + return as_case_with_else; + } + + auto as_set_vector = rewrite_set_vector(in, env, pool); + if (as_set_vector) { + return as_set_vector; + } + + auto as_set_vector2 = rewrite_set_vector_2(in, env, pool); + if (as_set_vector2) { + return as_set_vector2; + } + // nothing matched. return nullptr; } diff --git a/decompiler/analysis/stack_spill.cpp b/decompiler/analysis/stack_spill.cpp index 4db7b20257..49d14d08d2 100644 --- a/decompiler/analysis/stack_spill.cpp +++ b/decompiler/analysis/stack_spill.cpp @@ -78,12 +78,15 @@ struct StackInstrInfo { constexpr StackInstrInfo stack_instrs[] = {{InstructionKind::SQ, false, 16, false}, {InstructionKind::LQ, true, 16, false}, {InstructionKind::SW, false, 4, false}, + {InstructionKind::SH, false, 2, false}, {InstructionKind::SB, false, 1, false}, {InstructionKind::LBU, true, 1, false}, //{InstructionKind::LWU, true, 4, false} {InstructionKind::SD, false, 8, false}, {InstructionKind::SWC1, false, 4, false}, - {InstructionKind::LWC1, true, 4, false}}; + {InstructionKind::LWC1, true, 4, false}, + {InstructionKind::SB, false, 1, false}, + {InstructionKind::LBU, true, 1, false}}; } // namespace StackSpillMap build_spill_map(const std::vector& instructions, Range range) { @@ -111,4 +114,4 @@ StackSpillMap build_spill_map(const std::vector& instructions, Rang map.finalize(); return map; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/type_analysis.cpp b/decompiler/analysis/type_analysis.cpp index f6b3f428b8..a3491aae35 100644 --- a/decompiler/analysis/type_analysis.cpp +++ b/decompiler/analysis/type_analysis.cpp @@ -15,7 +15,8 @@ TypeState construct_initial_typestate(const TypeSpec& f_ts, const Env& env) { } // todo, more specific process types for behaviors. - result.get(Register(Reg::GPR, Reg::S6)) = TP_Type::make_from_ts(TypeSpec("process")); + result.get(Register(Reg::GPR, Reg::S6)) = + TP_Type::make_from_ts(TypeSpec(f_ts.try_get_tag("behavior").value_or("process"))); // initialize stack slots as uninitialized for (auto slot_info : env.stack_spills().map()) { @@ -91,6 +92,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F } std::vector block_init_types, op_types; + std::vector block_needs_update(func.basic_blocks.size(), true); block_init_types.resize(func.basic_blocks.size()); op_types.resize(func.ir2.atomic_ops->ops.size()); auto& aop = func.ir2.atomic_ops; @@ -111,6 +113,9 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F run_again = false; // do each block in the topological sort order: for (auto block_id : order.vist_order) { + if (!block_needs_update.at(block_id)) { + continue; + } auto& block = func.basic_blocks.at(block_id); TypeState* init_types = &block_init_types.at(block_id); for (int op_id = aop->block_id_to_first_atomic_op.at(block_id); @@ -145,6 +150,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F // for the next op... init_types = &op_types.at(op_id); } + block_needs_update.at(block_id) = false; // propagate the types: for each possible succ for (auto succ_block_id : {block.succ_ft, block.succ_branch}) { @@ -153,6 +159,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F if (dts.tp_lca(&block_init_types.at(succ_block_id), *init_types)) { // if something changed, run again! run_again = true; + block_needs_update.at(succ_block_id) = true; } } } diff --git a/decompiler/analysis/variable_naming.cpp b/decompiler/analysis/variable_naming.cpp index 2d473ab7ca..4413445362 100644 --- a/decompiler/analysis/variable_naming.cpp +++ b/decompiler/analysis/variable_naming.cpp @@ -730,6 +730,25 @@ void SSA::make_vars(const Function& function, const DecompilerTypeSystem& dts) { } } + // if (function.type.last_arg() != TypeSpec("none")) { + // auto return_var = function.ir2.atomic_ops->end_op().return_var(); + // auto return_reg = return_var.reg(); + // const auto& last_block = blocks.at(blocks.size() - 1); + // const auto& last_ins = last_block.ins.at(last_block.ins.size() - 1); + // assert(last_ins.src.size() == 1); + // auto return_idx = map.var_id(last_ins.src.at(0)); + // + // if (!program_read_vars[return_reg].empty()) { + // program_read_vars[return_reg].at(return_idx).type = + // TP_Type::make_from_ts(function.type.last_arg()); + // } + // + // if (!program_write_vars[return_reg].empty()) { + // program_write_vars[return_reg].at(return_idx).type = + // TP_Type::make_from_ts(function.type.last_arg()); + // } + // } + merge_infos(program_write_vars, program_read_vars, dts); // copy types from input argument coloring moves: @@ -897,6 +916,104 @@ std::unordered_map SSA::get_use_def_info( return result; } +namespace { + +VariableNames::VarInfo* try_lookup_read(VariableNames* in, RegId var_id) { + auto kv = in->read_vars.find(var_id.reg); + if (kv != in->read_vars.end()) { + if ((int)kv->second.size() > var_id.id) { + auto& entry = kv->second.at(var_id.id); + if (entry.initialized) { + return &entry; + } + } + } + return nullptr; +} + +VariableNames::VarInfo* try_lookup_write(VariableNames* in, RegId var_id) { + auto kv = in->write_vars.find(var_id.reg); + if (kv != in->write_vars.end()) { + if ((int)kv->second.size() > var_id.id) { + auto& entry = kv->second.at(var_id.id); + if (entry.initialized) { + return &entry; + } + } + } + return nullptr; +} + +bool is_128bit(const TP_Type& type, const DecompilerTypeSystem& dts) { + if (dts.ts.tc(TypeSpec("uint128"), type.typespec())) { + return true; + } + + if (dts.ts.tc(TypeSpec("int128"), type.typespec())) { + return true; + } + + if (type.kind == TP_Type::Kind::PCPYUD_BITFIELD) { + return true; + } + + if (type.kind == TP_Type::Kind::PCPYUD_BITFIELD_AND) { + return true; + } + + return false; +} + +void promote_register_class(const Function& func, + VariableNames* result, + const DecompilerTypeSystem& dts) { + enum class PromotionType { PROMOTE_64, PROMOTE_128 }; + std::unordered_map promote_map; + // here we loop through ops and find cases where we need to adjust types. + + auto& ao = func.ir2.atomic_ops; + for (size_t op_idx = 0; op_idx < ao->ops.size() - 1; op_idx++) { + auto* op = ao->ops.at(op_idx).get(); + auto op_as_asm = dynamic_cast(op); + if (op_as_asm) { + auto& instr = op_as_asm->instruction(); + if (gOpcodeInfo[(int)instr.kind].gpr_128) { + for (auto& reg : op_as_asm->write_regs()) { + if (reg.get_kind() == Reg::GPR) { + auto& info = result->lookup(reg, op_idx, AccessMode::WRITE); + promote_map[info.reg_id] = PromotionType::PROMOTE_128; + } + } + + for (auto& reg : op_as_asm->read_regs()) { + if (reg.get_kind() == Reg::GPR) { + auto& info = result->lookup(reg, op_idx, AccessMode::READ); + promote_map[info.reg_id] = PromotionType::PROMOTE_128; + } + } + } + } + } + + for (const auto& promotion : promote_map) { + // fmt::print("Promote {} to {}\n", promotion.first.print(), "uint128"); + + // first reads: + auto read_info = try_lookup_read(result, promotion.first); + auto write_info = try_lookup_write(result, promotion.first); + assert(read_info || write_info); + + if (read_info && !is_128bit(read_info->type, dts)) { + read_info->type = TP_Type::make_from_ts("uint128"); + } + + if (write_info && !is_128bit(write_info->type, dts)) { + write_info->type = TP_Type::make_from_ts("uint128"); + } + } +} +} // namespace + std::optional run_variable_renaming(const Function& function, const RegUsageInfo& rui, const FunctionAtomicOps& ops, @@ -982,6 +1099,8 @@ std::optional run_variable_renaming(const Function& function, // auto result = ssa.get_vars(); result.use_def_info = ssa.get_use_def_info(ssa_mapping); + + promote_register_class(function, &result, dts); return result; } else { return std::nullopt; diff --git a/decompiler/config.cpp b/decompiler/config.cpp index dccb5f247a..45f9d2c64f 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -33,6 +33,9 @@ Config read_config_file(const std::string& path_to_config_file) { config.dgo_names = inputs_json.at("dgo_names").get>(); config.object_file_names = inputs_json.at("object_file_names").get>(); config.str_file_names = inputs_json.at("str_file_names").get>(); + config.audio_dir_file_name = inputs_json.at("audio_dir_file_name").get(); + config.streamed_audio_file_names = + inputs_json.at("streamed_audio_file_names").get>(); if (cfg.contains("obj_file_name_map_file")) { config.obj_file_name_map_file = cfg.at("obj_file_name_map_file").get(); diff --git a/decompiler/config.h b/decompiler/config.h index c7af0b1be0..7b5161896b 100644 --- a/decompiler/config.h +++ b/decompiler/config.h @@ -68,6 +68,9 @@ struct Config { std::vector object_file_names; std::vector str_file_names; + std::string audio_dir_file_name; + std::vector streamed_audio_file_names; + std::string obj_file_name_map_file; bool disassemble_code = false; diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index cf80166879..ce4bc59617 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -92,6 +92,7 @@ (define-extern inspect (function object object)) (define-extern mem-print (function (pointer uint32) int symbol)) (define-extern print-tree-bitmask (function int int symbol)) +(define-extern quad-copy! (function pointer pointer int none)) ;; has issues: (define-extern breakpoint-range-set! (function uint uint uint int)) @@ -116,11 +117,6 @@ (define-extern *debug-segment* symbol) (define-extern *trace-list* pair) -;; - Unknowns - -;;(define-extern quad-copy! UNKNOWN) - - ;; ---------------------- ;; NO FILE ;; Unknowns / Built-Ins / Non-Original Types @@ -498,37 +494,61 @@ :type int32 :bitfield #f + (bucket-1 1) + (bucket-2 2) + (bucket-3 3) (tfrag-tex0 5) ;; merc0 10 ;; generic0 11 + (bucket-10 10) + (bucket-11 11) (tfrag-tex1 12) ;; merc1 17 ;; generic1 18 + (bucket-17 17) + (bucket-18 18) (shrub-tex0 19) (shrub-tex1 25) + (generic-foreground 30) ;; ? (alpha-tex0 31) (alpha-tex1 38) + (bucket-45 45) + (bucket-46 46) + (pris-tex0 48) + (bucket-49 49) + (bucket-50 50) ;; merc0 49 ;; generic0 50 (pris-tex1 51) + (bucket-52 52) + (bucket-53 53) ;; merc1 52 ;; generic1 53 + (bucket-55 55) + (bucket-56 56) (water-tex0 57) + (bucket-58 58) + (bucket-59 59) ;; merc0 58 (+ default) ;; generic0 59 (+ default) (water-tex1 60) + (bucket-61 61) + (bucket-62 62) ;; merc1 61 ;; generic1 62 + (depth-cue 64) + (bucket-65 65) + (sprite 66) ;; debug spheres? 67 (debug-draw0 67) ;; debug text 68 @@ -621,7 +641,10 @@ :type uint32 (display-marks 0) (bit0 0) ;; TODO - nav-enemy::45 + (bit1 1) + (bit2 2) (bit3 3) ;; TODO - nav-enemy::45 + (bit4 4) (bit5 5) ;; TODO - nav-enemy::45 (bit6 6) ;; TODO - nav-enemy::45 (bit7 7) ;; TODO - nav-enemy::45 @@ -788,9 +811,9 @@ (game-options #x127) (graphic-options #x128) (sound-options #x129) - + (hidden-power-cell #x12f) ;; why is this here?? - + (continue-without-saving #x13f) (back #x13e) (load-game #x14b) @@ -800,7 +823,7 @@ (ok #x15e) (exit-demo #x15f) (quit-game #x16f) - + (village1-mayor-money #x200) (vollage1-uncle-money #x201) (village1-yakow-herd #x202) @@ -825,43 +848,43 @@ (misty-return-to-pool #x215) ;; task name?? (misty-find-transpad #x216) ;; task name? (misty-balloon-lurkers #x217) - + (village1-level-name #x220) (beach-level-name #x221) (jungle-level-name #x222) (misty-level-name #x223) - + (beach-seagull-get #x22e) - + (jungle-lurkerm-unblock #x22f) (jungle-lurkerm-return #x230) - + (MISSING-orb-hint #x233) - + (beach-gimmie #x262) (beach-sentinel #x263) (jungle-canyon-end #x264) (jungle-temple-door #x265) (misty-bike-jump #x266) (misty-eco-challenge #x267) - + (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) (village2-oracle-money #x303) (swamp-tether #x304) - + (swamp-flutflut #x307) - + (swamp-billy #x309) - + (sunken-elevator-raise #x30a) (sunken-elevator-get-to-roof #x30b) (sunken-pipe #x30c) (sunken-climb-tube #x30d) ;; task name? (sunken-pool #x30e) ;; task name? (sunken-platforms #x30f) - + (rolling-moles #x310) (rolling-moles-return #x311) (rolling-robbers #x312) @@ -869,22 +892,22 @@ (rolling-race-return #x314) (rolling-lake #x315) (rolling-plants #x316) - + (unknown-buzzers #x317) - + (village2-level-name #x319) - + (rolling-level-name #x31b) (swamp-level-name #x31c) (sunken-level-name #x31d) (ogre-level-name #x31e) - + (swamp-battle #x321) (sunken-bottom #x322) ;; task name? (reach-center #x323) ;; task name? (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) - + (village3-miner-money #x400) (village3-oracle-money #x401) (snow-ram-3-left #x402) @@ -893,58 +916,58 @@ (snow-fort #x405) (snow-bunnies #x406) (snow-open-door #x408) ;; task name? - + (cave-robot-climb #x40e) (cave-dark-climb #x40f) ;; destroy crystals - + (cave-gnawers #x410) (cave-dark-crystals #x411) - + (village3-buzzer #x413) - + (village3-level-name #x415) - + (snowy-level-name #x417) - + (cave-level-name #x419) - + (lavatube-level-name #x41b) - + (snow-eggtop #x421) - + (cave-spider-tunnel #x423) (cave-platforms #x424) - + (cave-swing-poles #x426) - + (snow-frozen-crate #x42b) ;; task name? (snow-bumpers #x42c) - + (fire-canyon-end #x500) (fire-canyon-buzzer #x501) - + (fire-canyon-level-name #x50c) - + (ogre-end #x600) (ogre-buzzer #x601) (ogre-boss #x603) - + (lavatube-end #x700) (lavatube-buzzer #x701) - + (citadel-buzzer #x800) (citadel-level-name #x801) (citadel-sage-blue #x802) (citadel-sage-red #x803) (citadel-sage-yellow #x804) (citadel-sage-green #x805) - + (training-gimmie-task-name #x91b) (training-buzzer-task-name #x91c) (training-door-task-name #x91d) (training-climb-task-name #x91e) (training-level-name #x91f) - + (inc #xf10) (europe #xf11) ) @@ -967,20 +990,22 @@ ;; - Types (define-extern process-tree type) ; deftype provided by C Kernel +(declare-type process basic) + (deftype process-tree (basic) ((name basic :offset-assert 4) (mask process-mask :offset-assert 8) (parent (pointer process-tree) :offset-assert 12) (brother (pointer process-tree) :offset-assert 16) (child (pointer process-tree) :offset-assert 20) - (ppointer (pointer process-tree) :offset-assert 24) + (ppointer (pointer process) :offset-assert 24) (self process-tree :offset-assert 28) ) (:methods (new (symbol type basic) _type_ 0) (activate (_type_ process-tree basic pointer) process-tree 9) (deactivate (_type_) none 10) - (dummy-method-11 () none 11) + (dummy-method-11 (_type_ object) none 11) (run-logic? (_type_) symbol 12) (dummy-method () none 13) ) @@ -1004,12 +1029,12 @@ (allow-to-run process-mask :offset-assert 12) (next-pid int32 :offset-assert 16) (fast-stack-top pointer :offset-assert 20) - (current-process basic :offset-assert 24) + (current-process process :offset-assert 24) (relocating-process basic :offset-assert 28) (relocating-min int32 :offset-assert 32) (relocating-max int32 :offset-assert 36) (relocating-offset int32 :offset-assert 40) - (low-memory-message basic :offset-assert 44) + (low-memory-message symbol :offset-assert 44) ) :method-count-assert 9 :size-assert #x30 @@ -1165,7 +1190,7 @@ (function object) (function object object object object object object object) (function object) - (function basic int basic event-message-block object)) _type_ 0) + (function process int symbol event-message-block object)) _type_ 0) ) :method-count-assert 9 :size-assert #x24 @@ -1173,10 +1198,10 @@ ) (deftype event-message-block (structure) - ((to basic :offset-assert 0) - (from basic :offset-assert 4) + ((to process :offset-assert 0) + (from process :offset-assert 4) (num-params int32 :offset-assert 8) - (message basic :offset-assert 12) + (message symbol :offset-assert 12) (param uint64 7 :offset-assert 16) ) :method-count-assert 9 @@ -1211,7 +1236,7 @@ (state state :offset-assert #x38) (trans-hook function :offset-assert #x3c) (post-hook function :offset-assert #x40) - (event-hook (function basic int basic event-message-block object) :offset-assert #x44) + (event-hook (function process int symbol event-message-block object) :offset-assert #x44) (allocated-length int32 :offset-assert #x48) (next-state state :offset-assert #x4c) (heap-base pointer :offset-assert #x50) @@ -1225,7 +1250,7 @@ (new (symbol type basic int) _type_ 0) (activate (_type_ process-tree basic pointer) process-tree 9) (deactivate (process) none 10) - (dummy-method-11 () none 11) + (dummy-method-11 (_type_ object) none 11) (run-logic? (process) symbol 12) (dummy-method () none 13) ) @@ -1833,8 +1858,8 @@ :size-assert #x28 :flag-assert #xb00000028 (:methods - (TODO-RENAME-HUGE-9 (_type_ vector) none 9) - (TODO-RENAME-10 (_type_ vector vector) float 10) + (debug-draw (_type_ vector) none 9) + (ray-capsule-intersect (_type_ vector vector) float 10) ) ) @@ -1848,8 +1873,8 @@ :size-assert #x28 :flag-assert #xb00000028 (:methods - (TODO-RENAME-HUGE-9 (_type_ vector) none 9) - (TODO-RENAME-10 (_type_ vector vector) float 10) + (debug-draw (_type_ vector) none 9) + (ray-flat-cyl-intersect (_type_ vector vector) float 10) ) ) @@ -1983,7 +2008,7 @@ ;; - Types (deftype matrix (structure) - ((vector vector 4 :inline :offset 0) + ((vector vector 4 :score 999 :inline :offset 0) (quad uint128 4 :offset 0) (data float 16 :offset 0) ) @@ -2171,8 +2196,8 @@ ) (deftype trsqv (trsq) - ((pause-adjust-distance float :offset 4) ;; todo meters - (nav-radius float :offset 8) ;; todo meters + ((pause-adjust-distance meters :offset 4) + (nav-radius meters :offset 8) (transv vector :inline :offset-assert 64) (rotv vector :inline :offset-assert 80) (scalev vector :inline :offset-assert 96) @@ -2184,24 +2209,25 @@ :size-assert #x8c :flag-assert #x1c0000008c (:methods - (TODO-RENAME-9 (_type_ vector float int) quaternion 9) - (TODO-RENAME-10 (_type_ vector) quaternion 10) - (TODO-RENAME-11 (_type_ vector float int) quaternion 11) - (TODO-RENAME-12 (_type_ vector) quaternion 12) - (TODO-RENAME-13 (_type_ float float int) quaternion 13) - (TODO-RENAME-14 (_type_ float) quaternion 14) - (TODO-RENAME-15 (_type_ float) quaternion 15) - (TODO-RENAME-VECTOR-DOT-16 (_type_ float) quaternion 16) - (TODO-RENAME-17 (_type_ quaternion float float) quaternion 17) - (set-quaternion!-18 (_type_ quaternion) quaternion 18) - (TODO-RENAME-19 (_type_ vector) quaternion 19) - (TODO-RENAME-20 (_type_ vector) quaternion 20) - (rot->dir-targ!-21 (_type_) quaternion 21) + (seek-toward-heading-vec! (_type_ vector float int) quaternion 9) + (set-heading-vec! (_type_ vector) quaternion 10) + (seek-to-point-toward-point! (_type_ vector float int) quaternion 11) + (point-toward-point! (_type_ vector) quaternion 12) + (seek-toward-yaw-angle! (_type_ float float int) quaternion 13) + (set-yaw-angle-clear-roll-pitch! (_type_ float) quaternion 14) + + (set-roll-to-grav! (_type_ float) quaternion 15) + (set-roll-to-grav-2! (_type_ float) quaternion 16) + (rotate-toward-orientation! (_type_ quaternion float float) quaternion 17) + (set-quaternion! (_type_ quaternion) quaternion 18) + (set-heading-vec-clear-roll-pitch! (_type_ vector) quaternion 19) + (point-toward-point-clear-roll-pitch! (_type_ vector) quaternion 20) + (rot->dir-targ! (_type_) quaternion 21) (y-angle (_type_) float 22) (global-y-angle-to-point (_type_ vector) float 23) (relative-y-angle-to-point (_type_ vector) float 24) - (TODO-VECTOR-MATH-ISSUES-25 (_type_) float 25) - (dummy-26 () none 26) + (roll-relative-to-gravity (_type_) float 25) + (TODO-RENAME-26 (_type_ int vector float) trsqv 26) (get-quaternion (_type_) quaternion 27) ) ) @@ -2844,10 +2870,10 @@ :flag-assert #xe0000006c (:methods (new (symbol type basic vector) _type_ 0) - (dummy-9 (_type_) int 9) - (dummy-10 (_type_ sound-name) int 10) - (dummy-11 (_type_ vector) int 11) - (dummy-12 (_type_ int) int 12) + (update! (_type_) int 9) + (change-sound! (_type_ sound-name) int 10) + (update-trans! (_type_ vector) int 11) + (update-vol! (_type_ int) int 12) (stop! (_type_) int 13) ) ) @@ -3299,7 +3325,7 @@ ;; - Types (deftype dma-foreground-sink (basic) - ((bucket int32 :offset-assert 4) + ((bucket bucket-id :offset-assert 4) (foreground-texture-page int8 :offset-assert 8) (foreground-texture-level int8 :offset-assert 9) (foreground-output-bucket int8 :offset-assert 10) @@ -3455,7 +3481,7 @@ (define-extern dma-buffer-add-buckets (function dma-buffer int none)) (define-extern dma-buffer-patch-buckets (function dma-bucket int dma-bucket)) -(define-extern dma-bucket-insert-tag (function dma-bucket int pointer (pointer dma-tag) pointer)) +(define-extern dma-bucket-insert-tag (function dma-bucket bucket-id pointer (pointer dma-tag) pointer)) ;; ---------------------- @@ -3682,7 +3708,7 @@ (deftype gs-frame (uint64) ((fbp uint16 :offset 0 :size 9) (fbw uint8 :offset 16 :size 6) - (psm uint8 :offset 24 :size 6) + (psm gs-psm :offset 24 :size 6) (fbmsk uint32 :offset 32 :size 32) ) :flag-assert #x900000008 @@ -3691,7 +3717,7 @@ ;; the GS's ZBUF registers make various settings regarding Z buffer. (deftype gs-zbuf (uint64) ((zbp uint16 :offset 0 :size 9) - (psm uint8 :offset 24 :size 4) + (psm gs-psm :offset 24 :size 4) (zmsk uint8 :offset 32 :size 1) ) :flag-assert #x900000008 @@ -3738,16 +3764,34 @@ :flag-assert #x900000008 ) +(defenum gs-atest + :type uint8 + (never 0) + (always 1) + (less 2) + (less-equal 3) + (equal 4) + (greater-equal 5) + (greater 6) + (not-equal 7) + ) +(defenum gs-ztest + :type uint8 + (never 0) + (always 1) + (greater-equal 2) + (greater 3) + ) ;; the GS's TEST register performs settings related to the pixel test. (deftype gs-test (uint64) ((ate uint8 :offset 0 :size 1) ;; alpha test enable - (atst uint8 :offset 1 :size 3) ;; alpha test method + (atst gs-atest :offset 1 :size 3) ;; alpha test method (aref uint8 :offset 4 :size 8) ;; alpha val reference (afail uint8 :offset 12 :size 2) ;; processing method on alpha test fail (date uint8 :offset 14 :size 1) ;; dest alpha test enable (datm uint8 :offset 15 :size 1) ;; dest alpha test mode (zte uint8 :offset 16 :size 1) ;; depth test enable - (ztst uint8 :offset 17 :size 2) ;; depth test method + (ztst gs-ztest :offset 17 :size 2) ;; depth test method ) :flag-assert #x900000008 ) @@ -3935,9 +3979,17 @@ :flag-assert #x900000008 ) +(defenum gs-tex-wrap-mode + :type uint8 + (repeat 0) + (clamp 1) + (region-clamp 2) + (region-repeat 3) + ) + (deftype gs-clamp (uint64) - ((wms uint8 :offset 0 :size 2) - (wmt uint8 :offset 2 :size 2) + ((wms gs-tex-wrap-mode :offset 0 :size 2) + (wmt gs-tex-wrap-mode :offset 2 :size 2) (minu uint16 :offset 4 :size 10) (maxu uint16 :offset 14 :size 10) (minv uint16 :offset 24 :size 10) @@ -4037,45 +4089,91 @@ :flag-assert #x900000004 ) +(defenum gif-reg-id + :type uint8 + (prim 0) + (rgbaq 1) + (st 2) + (uv 3) + (xyzf2 4) + (xyz2 5) + (tex0-1 6) + (tex0-2 7) + (clamp-1 8) + (clamp-2 9) + (fog 10) + (xyzf3 12) + (xyz3 13) + (a+d 14) + (nop 15) + ) + +(defenum gif-flag + :type uint8 + (packed 0) + (reg-list 1) + (image 2) + (disable 3) + ) + (deftype gif-tag64 (uint64) ((nloop uint16 :offset 0 :size 15) (eop uint8 :offset 15 :size 1) (id uint16 :offset 32 :size 14) (pre uint8 :offset 46 :size 1) (prim gs-prim :offset 47 :size 11) - (flg uint8 :offset 58 :size 2) + (flg gif-flag :offset 58 :size 2) (nreg uint8 :offset 60 :size 4)) :flag-assert #x900000008 ) - (deftype gif-tag (uint128) ((nloop uint16 :offset 0 :size 15) (eop uint8 :offset 15 :size 1) (id uint16 :offset 32 :size 14) (pre uint8 :offset 46 :size 1) (prim uint16 :offset 47 :size 11) - (flg uint8 :offset 58 :size 2) + (flg gif-flag :offset 58 :size 2) (nreg uint8 :offset 60 :size 4) - (regs0 uint8 :offset 64 :size 4) - (regs1 uint8 :offset 68 :size 4) - (regs2 uint8 :offset 72 :size 4) - (regs3 uint8 :offset 76 :size 4) - (regs4 uint8 :offset 80 :size 4) - (regs5 uint8 :offset 84 :size 4) - (regs6 uint8 :offset 88 :size 4) - (regs7 uint8 :offset 92 :size 4) - (regs8 uint8 :offset 96 :size 4) - (regs9 uint8 :offset 100 :size 4) - (regs10 uint8 :offset 104 :size 4) - (regs11 uint8 :offset 108 :size 4) - (regs12 uint8 :offset 112 :size 4) - (regs13 uint8 :offset 116 :size 4) - (regs14 uint8 :offset 120 :size 4) - (regs15 uint8 :offset 124 :size 4) + (regs0 gif-reg-id :offset 64 :size 4) + (regs1 gif-reg-id :offset 68 :size 4) + (regs2 gif-reg-id :offset 72 :size 4) + (regs3 gif-reg-id :offset 76 :size 4) + (regs4 gif-reg-id :offset 80 :size 4) + (regs5 gif-reg-id :offset 84 :size 4) + (regs6 gif-reg-id :offset 88 :size 4) + (regs7 gif-reg-id :offset 92 :size 4) + (regs8 gif-reg-id :offset 96 :size 4) + (regs9 gif-reg-id :offset 100 :size 4) + (regs10 gif-reg-id :offset 104 :size 4) + (regs11 gif-reg-id :offset 108 :size 4) + (regs12 gif-reg-id :offset 112 :size 4) + (regs13 gif-reg-id :offset 116 :size 4) + (regs14 gif-reg-id :offset 120 :size 4) + (regs15 gif-reg-id :offset 124 :size 4) ) :flag-assert #x900000010 ) +(deftype gif-tag-regs (uint64) + ((regs0 gif-reg-id :offset 0 :size 4) + (regs1 gif-reg-id :offset 4 :size 4) + (regs2 gif-reg-id :offset 8 :size 4) + (regs3 gif-reg-id :offset 12 :size 4) + (regs4 gif-reg-id :offset 16 :size 4) + (regs5 gif-reg-id :offset 20 :size 4) + (regs6 gif-reg-id :offset 24 :size 4) + (regs7 gif-reg-id :offset 28 :size 4) + (regs8 gif-reg-id :offset 32 :size 4) + (regs9 gif-reg-id :offset 36 :size 4) + (regs10 gif-reg-id :offset 40 :size 4) + (regs11 gif-reg-id :offset 44 :size 4) + (regs12 gif-reg-id :offset 48 :size 4) + (regs13 gif-reg-id :offset 52 :size 4) + (regs14 gif-reg-id :offset 56 :size 4) + (regs15 gif-reg-id :offset 60 :size 4) + ) + ) + (deftype gs-gif-tag (structure) ((qword uint128 :offset-assert 0) ;; is "qword" and inline? in game @@ -4189,9 +4287,7 @@ (debug-buf dma-buffer :offset 36) (global-buf dma-buffer :offset 40) (bucket-group dma-bucket :offset 44) - (buffer uint32 11 :offset 4) ;; for debugging? - - + (buffer dma-buffer 11 :offset 4) (profile-bar profile-bar 2 :offset 48) (run-time uint64 :offset 56) ) @@ -4397,28 +4493,31 @@ ;; - Types +(declare-type art-group basic) ;; custom fields (deftype load-dir (basic) ((unknown basic :offset-assert 4) - (string-array (array string) :offset-assert 8) - (data-array (array basic) :score -50 :offset-assert 12) + (string-array (array string) :offset-assert 8) ;; these are the names + (data-array (array basic) :score -50 :offset-assert 12) ;; this is the file data. ) :flag-assert #xb00000010 (:methods (new (symbol type int basic) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) + ;; these methods dont exist + (dummy-9 (_type_ string symbol kheap int) art-group 9) + (dummy-10 (_type_ art-group) art-group 10) ) ) ;; custom fields -(declare-type art-group basic) (deftype load-dir-art-group (load-dir) ((art-group-array (array art-group) :offset 12) ) :flag-assert #xb00000010 (:methods (new (symbol type int basic) _type_ 0) + (dummy-9 (_type_ string symbol kheap int) art-group 9) + (dummy-10 (_type_ art-group) art-group 10) ) ) @@ -4431,13 +4530,13 @@ (heap kheap :inline :offset-assert 32) (pending-load-file string :offset-assert 48) (pending-load-file-part int32 :offset-assert 52) - (pending-load-file-owner uint64 :offset-assert 56) + (pending-load-file-owner handle :offset-assert 56) (pending-load-file-priority float :offset-assert 64) (load-file string :offset-assert 68) (load-file-part int32 :offset-assert 72) - (load-file-owner uint64 :offset-assert 80) + (load-file-owner handle :offset-assert 80) (load-file-priority float :offset-assert 88) - (buf uint32 :offset-assert 92) + (buf pointer :offset-assert 92) (len int32 :offset-assert 96) (art-group art-group :offset-assert 100) ) @@ -4446,23 +4545,25 @@ :flag-assert #x1000000068 (:methods (new (symbol type int) _type_ 0) - (dummy-9 (_type_ symbol int symbol float) none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) + (want-file (_type_ string int handle float) int 9) + (update (_type_) int 10) + (inactive? (_type_) symbol 11) + (file-status (_type_ string int) symbol 12) + (link-file (_type_ art-group) art-group 13) + (unlink-file (_type_ art-group) int 14) + (unlock! (_type_) symbol 15) ) ) (deftype spool-anim (basic) ((name string :offset 16) ;; why? - (index int32 :offset-assert 20) + (buf1 external-art-buffer :offset 16) ;; custom + (buf2 external-art-buffer :offset-assert 20) ;; custom (also what?) + (index int32 :offset 20) (parts int32 :offset-assert 24) (priority float :offset-assert 28) - (owner uint64 :offset-assert 32) - (command-list basic :offset-assert 40) + (owner handle :offset-assert 32) + (command-list pair :offset-assert 40) ) :pack-me :method-count-assert 9 @@ -4470,14 +4571,13 @@ :flag-assert #x90000002c ) -; todo inline basics (deftype external-art-control (basic) ((buffer external-art-buffer 2 :offset-assert 4) - (rec spool-anim 3 :inline) - (spool-lock uint64 :offset-assert 160) - (reserve-buffer basic :offset-assert 168) + (rec spool-anim 3 :inline :offset-assert 16) + (spool-lock handle :offset-assert 160) + (reserve-buffer external-art-buffer :offset-assert 168) (reserve-buffer-count int32 :offset-assert 172) - (active-stream basic :offset-assert 176) + (active-stream string :offset-assert 176) (preload-stream spool-anim :inline :offset-assert 184) (last-preload-stream spool-anim :inline :offset-assert 232) (end-pad uint32) @@ -4487,14 +4587,14 @@ :flag-assert #x1100000118 (:methods (new (symbol type) _type_ 0) - (dummy-9 (_type_ symbol) none 9) - (dummy-10 (_type_) none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) + (update (_type_ symbol) int 9) + (clear-rec (_type_) int 10) + (spool-push (_type_ string int process float) int 11) + (file-status (_type_ string int) symbol 12) + (reserve-alloc (_type_) kheap 13) + (reserve-free (_type_ kheap) int 14) + (none-reserved? (_type_) symbol 15) + (try-preload-stream (_type_ string int process float) int 16) ) ) @@ -4560,7 +4660,7 @@ (dummy-18 () none 18) (dummy-19 () none 19) (unload! (_type_ texture-page) int 20) - (upload-one-common! (_type_) symbol 21) + (upload-one-common! (_type_ level) symbol 21) (lookup-boot-common-id (_type_ int) int 22) ) ) @@ -4784,7 +4884,7 @@ (bsp-mask uint64 :offset-assert 80) (bsphere sphere :offset-assert 88) (buzzer int32 :offset-assert 92) - (bottom-height float :offset-assert 96) ;; meters + (bottom-height meters :offset-assert 96) (run-packages pair :offset-assert 100) (prev-level basic :offset-assert 104) (next-level basic :offset-assert 108) @@ -4835,7 +4935,7 @@ (ambient entity-ambient-data-array :offset-assert 288) (closest-object float 9 :offset-assert 292) (upload-size int32 9 :offset-assert 328) - (level-distance float :offset-assert 364) ; meters + (level-distance meters :offset-assert 364) (inside-sphere? symbol :offset-assert 368) (inside-boxes? symbol :offset-assert 372) (display? symbol :offset-assert 376) @@ -4867,9 +4967,9 @@ (add-irq-to-tex-buckets! (_type_) none 11) (unload! (_type_) _type_ 12) (bsp-name (_type_) symbol 13) - (dummy-14 (_type_ object) none 14) + (dummy-14 (_type_ object) memory-usage-block 14) (dummy-15 (_type_ vector) symbol 15) - (dummy-16 (_type_) none 16) + (dummy-16 (_type_ uint uint) none 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login (_type_) _type_ 19) @@ -4888,8 +4988,8 @@ (declare-type entity-links structure) (deftype level-group (basic) ((length int32 :offset-assert 4) - (unknown-level-1 level :offset-assert 8) - (unknown-level-2 level :offset-assert 12) + (log-in-level-bsp bsp-header :offset-assert 8) + (loading-level level :offset-assert 12) (entity-link entity-links :offset-assert 16) ;; not sure what's going on here (border? basic :offset-assert 20) (vis? basic :offset-assert 24) @@ -4917,7 +5017,7 @@ (level-get-for-use (_type_ symbol symbol) level 11) (activate-levels! (_type_) int 12) (dummy-13 () none 13) - (dummy-14 () none 14) + (dummy-14 (_type_ object) none 14) (dummy-15 () none 15) (dummy-16 (_type_) int 16) (level-get-target-inside (_type_) level 17) @@ -4982,9 +5082,9 @@ ) (deftype math-camera (basic) - ((d float :offset-assert 4) ;; meters - (f float :offset-assert 8) ;; meters - (fov float :offset-assert 12) ;; deg + ((d meters :offset-assert 4) + (f meters :offset-assert 8) + (fov degrees :offset-assert 12) (x-ratio float :offset-assert 16) (y-ratio float :offset-assert 20) (x-pix float :offset-assert 24) @@ -4996,8 +5096,8 @@ (y-clip-ratio-in float :offset-assert 48) (y-clip-ratio-over float :offset-assert 52) (cull-info cull-info :inline :offset-assert 56) - (fog-start float :offset-assert 120) ;; meters - (fog-end float :offset-assert 124) ;; meters + (fog-start meters :offset-assert 120) + (fog-end meters :offset-assert 124) (fog-max float :offset-assert 128) (fog-min float :offset-assert 132) (reset int32 :offset-assert 136) @@ -5026,8 +5126,8 @@ (pfog0 float :offset-assert 832) (pfog1 float :offset-assert 836) (trans vector :inline :offset-assert 848) - (plane uint128 4 :offset-assert 864) - (guard-plane uint128 4 :offset-assert 928) + (plane plane 4 :inline :offset-assert 864) + (guard-plane plane 4 :inline :offset-assert 928) (shrub-mat matrix :inline :offset-assert 992) (fov-correction-factor float :offset-assert 1056) ) @@ -5065,7 +5165,7 @@ (define-extern math-cam-start-smoothing (function float float quaternion)) (define-extern move-target-from-pad (function transform int transform)) (define-extern transform-point-vector! (function vector vector symbol)) -(define-extern transform-point-qword! (function vector vector symbol)) +(define-extern transform-point-qword! (function vector4w vector symbol)) (define-extern transform-point-vector-scale! (function vector vector float)) (define-extern init-for-transform (function matrix none)) @@ -5228,7 +5328,7 @@ (define-extern vblank-handler (function int)) (define-extern set-display-gs-state (function dma-buffer int int int int int dma-buffer)) (define-extern set-display-gs-state-offset (function dma-buffer int int int int int int int dma-buffer)) -(define-extern reset-display-gs-state (function display dma-buffer int none)) +(define-extern reset-display-gs-state (function display dma-buffer int display)) ;; - Symbols @@ -5382,7 +5482,7 @@ (sfx-volume float :offset-assert 4) (music-volume float :offset-assert 8) (dialog-volume float :offset-assert 12) - (process-mask uint32 :offset-assert 16) + (process-mask process-mask :offset-assert 16) (common-page int32 :offset-assert 20) (language int64 :offset-assert 24) (screenx int32 :offset-assert 32) @@ -5558,8 +5658,8 @@ (define-extern loado (function string kheap object)) (define-extern texture-relocate (function dma-buffer texture int gs-psm int dma-buffer)) (define-extern dma-buffer-add-ref-texture (function dma-buffer pointer int int gs-psm none)) -(define-extern upload-vram-pages (function texture-pool texture-pool-segment texture-page int int int)) -(define-extern upload-vram-pages-pris (function texture-pool texture-pool-segment texture-page int int int)) +(define-extern upload-vram-pages (function texture-pool texture-pool-segment texture-page int bucket-id int)) +(define-extern upload-vram-pages-pris (function texture-pool texture-pool-segment texture-page bucket-id int int)) (define-extern movie? (function symbol)) (define-extern texture-page-near-allocate-1 (function texture-pool texture-page kheap int texture-page)) (define-extern texture-page-near-allocate-0 (function texture-pool texture-page kheap int texture-page)) @@ -5782,7 +5882,7 @@ ) (deftype skeleton (inline-array-class) - () + ((bones bone :inline :dynamic)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -5826,6 +5926,7 @@ ;; - Types +(declare-type ambient-list structure) (deftype drawable (basic) ((id int16 :offset-assert 4) ; (unknown basic :offset-assert 8) ;; - from default-menu::build-instance-list @@ -5835,15 +5936,15 @@ :size-assert #x20 :flag-assert #x1200000020 (:methods - (dummy-9 (_type_) _type_ 9) ;; probably login or init. - (dummy-10 (_type_ drawable display-frame) int 10) ;; display-frame is from the method inspect tool - (dummy-11 (_type_ int) none 11) ; int - length - (dummy-12 (_type_ int) none 12) ; int - length - (dummy-13 (_type_ int) none 13) ; int - length - (dummy-14 () none 14) - (dummy-15 (_type_) none 15) + (login (_type_) _type_ 9) ;; probably login or init. + (draw (_type_ drawable display-frame) none 10) ;; display-frame is from the method inspect tool + (dummy-11 (_type_ int object) none 11) ; int - length, collision related + (dummy-12 (_type_ int object) none 12) ; int - length, collision related + (dummy-13 (_type_ int object) none 13) ; int - length, collision related + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ object object) none 15) ;; something debugging (dummy-16 (_type_ object object) object 16) - (dummy-17 () none 17) + (dummy-17 (_type_ sphere int ambient-list) none 17) ) ) @@ -5913,24 +6014,18 @@ ;; field distance is a float printed as hex? ) -; (deftype drawable-inline-array-node (drawable-inline-array) -; () -; :method-count-assert 18 -; :size-assert #x44 -; :flag-assert #x1200000044 -; ;; too many basic blocks -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; ) -; ) +(deftype drawable-inline-array-node (drawable-inline-array) + ((data draw-node 1 :inline) + (pad uint32) + ) + :method-count-assert 18 + :size-assert #x44 + :flag-assert #x1200000044 + ;; too many basic blocks + (:methods + + ) + ) (deftype draw-node-dma (structure) ((banka draw-node 32 :inline :offset-assert 0) @@ -6045,14 +6140,13 @@ (deftype ambient-list (structure) ((num-items int32 :offset-assert 0) - (items uint32 2048 :offset-assert 4) + (items drawable-ambient 2048 :offset-assert 4) ) :method-count-assert 9 :size-assert #x2004 :flag-assert #x900002004 ) - ;; ---------------------- ;; File - game-task-h ;; Source Path - engine/game/task/game-task-h.gc @@ -6416,7 +6510,7 @@ ) (deftype light-volume (basic) - ((light-array basic :offset-assert 4) + ((light-array light-array :offset-assert 4) ) :method-count-assert 9 :size-assert #x8 @@ -6522,9 +6616,10 @@ ) (deftype ocean-mid-mask (structure) - ((mask uint8 8 :offset-assert 0) + ((mask uint8 8 :offset-assert 0) ;; avoid huge arrays. (this causes an ocean-transition function to not decompile!) (dword uint64 :offset 0) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -6539,7 +6634,7 @@ ) (deftype ocean-mid-masks (basic) - ((data uint32 :offset-assert 4) + ((data (inline-array ocean-mid-mask) :offset-assert 4) ) :pack-me :method-count-assert 9 @@ -6548,7 +6643,7 @@ ) (deftype ocean-trans-mask (structure) - ((mask uint16 4 :offset-assert 0) + ((mask uint8 4 :offset-assert 0) (word uint64 :offset 0) ) :pack-me @@ -6568,7 +6663,7 @@ ) (deftype ocean-trans-indices (basic) - ((data uint32 2304 :offset-assert 4) + ((data ocean-trans-index 2304 :inline :offset-assert 4) ) :method-count-assert 9 :size-assert #x2404 @@ -6584,7 +6679,7 @@ ) (deftype ocean-near-indices (basic) - ((data uint32 :offset-assert 4) + ((data (inline-array ocean-near-index) :offset-assert 4) ) :method-count-assert 9 :size-assert #x8 @@ -6657,9 +6752,9 @@ (corner-array ocean-corner 25 :inline :offset-assert 80) (corner-count int32 :offset-assert 2080) (temp-vecs vector 4 :inline :offset-assert 2096) - (mid-mask-ptrs pointer 36 :offset-assert 2160) + (mid-mask-ptrs (pointer int32) 36 :offset-assert 2160) (mid-camera-masks uint64 36 :offset-assert 2304) - (trans-mask-ptrs pointer 64 :offset-assert 2592) + (trans-mask-ptrs (pointer int32) 64 :offset-assert 2592) (trans-camera-masks ocean-trans-mask 16 :inline :offset-assert 2848) (trans-temp-masks ocean-trans-mask 16 :inline :offset-assert 2976) (near-mask-indices uint16 16 :offset-assert 3104) @@ -6865,13 +6960,13 @@ ;; - Symbols -(define-extern *ocean-work* ocean-work) ;; unknown type -(define-extern *ocean-facing* int) ;; unknown type -(define-extern *ocean-off* symbol) ;; unknown type -(define-extern *ocean-mid-off* symbol) ;; unknown type -(define-extern *ocean-near-off* symbol) ;; unknown type -(define-extern *ocean-heights* symbol) ;; unknown type -(define-extern *ocean-verts* symbol) ;; unknown type +(define-extern *ocean-work* ocean-work) +(define-extern *ocean-facing* int) +(define-extern *ocean-off* symbol) +(define-extern *ocean-mid-off* symbol) +(define-extern *ocean-near-off* symbol) +(define-extern *ocean-heights* symbol) +(define-extern *ocean-verts* symbol) ;; ---------------------- @@ -6882,25 +6977,25 @@ ;; - Symbols -(define-extern *ocean-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-up-table* (pointer float)) ;; unknown type -(define-extern *ocean-down-table* (pointer float)) ;; unknown type -(define-extern *ocean-down-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-down-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-up-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-up-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-up-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-down-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-down-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-down-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-up-right-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-up-left-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-corner-table* (pointer float)) ;; unknown type -(define-extern *ocean-trans-strip-array* (pointer float)) ;; unknown type -(define-extern *ocean-trans-st-table* (pointer float)) ;; unknown type +(define-extern *ocean-left-table* (pointer float)) +(define-extern *ocean-right-table* (pointer float)) +(define-extern *ocean-up-table* (pointer float)) +(define-extern *ocean-down-table* (pointer float)) +(define-extern *ocean-down-left-table* (pointer float)) +(define-extern *ocean-down-right-table* (pointer float)) +(define-extern *ocean-up-right-table* (pointer float)) +(define-extern *ocean-up-left-table* (pointer float)) +(define-extern *ocean-trans-left-table* (pointer float)) +(define-extern *ocean-trans-right-table* (pointer float)) +(define-extern *ocean-trans-up-table* (pointer float)) +(define-extern *ocean-trans-down-table* (pointer float)) +(define-extern *ocean-trans-down-left-table* (pointer float)) +(define-extern *ocean-trans-down-right-table* (pointer float)) +(define-extern *ocean-trans-up-right-table* (pointer float)) +(define-extern *ocean-trans-up-left-table* (pointer float)) +(define-extern *ocean-trans-corner-table* (inline-array vector4w-2)) +(define-extern *ocean-trans-strip-array* (pointer float)) ;; TODO this should probably be a ocean-trans-strip-array ? +(define-extern *ocean-trans-st-table* (inline-array vector)) ;; ---------------------- @@ -6911,25 +7006,25 @@ ;; - Symbols -(define-extern *ocean-spheres-village1* ocean-spheres) ;; unknown type -(define-extern *ocean-colors-village1* ocean-colors) ;; unknown type -(define-extern *ocean-near-indices-village1* ocean-near-indices) ;; unknown type -(define-extern *ocean-trans-indices-village1* ocean-trans-indices) ;; unknown type -(define-extern *ocean-mid-indices-village1* ocean-mid-indices) ;; unknown type -(define-extern *ocean-mid-masks-village1* ocean-mid-masks) ;; unknown type -(define-extern *ocean-spheres-village2* ocean-spheres) ;; unknown type -(define-extern *ocean-colors-village2* ocean-colors) ;; unknown type -(define-extern *ocean-near-indices-village2* ocean-near-indices) ;; unknown type -(define-extern *ocean-trans-indices-village2* ocean-trans-indices) ;; unknown type -(define-extern *ocean-mid-indices-village2* ocean-mid-indices) ;; unknown type -(define-extern *ocean-mid-masks-village2* ocean-mid-masks) ;; unknown type -(define-extern *ocean-near-indices-sunken* ocean-near-indices) ;; unknown type -(define-extern *ocean-trans-indices-sunken* ocean-trans-indices) ;; unknown type -(define-extern *ocean-mid-indices-sunken* ocean-mid-indices) ;; unknown type -(define-extern *ocean-mid-masks-sunken* ocean-mid-masks) ;; unknown type -(define-extern *ocean-map-village1* ocean-map) ;; unknown type -(define-extern *ocean-map-village2* ocean-map) ;; unknown type -(define-extern *ocean-map-sunken* ocean-map) ;; unknown type +(define-extern *ocean-spheres-village1* ocean-spheres) +(define-extern *ocean-colors-village1* ocean-colors) +(define-extern *ocean-near-indices-village1* ocean-near-indices) +(define-extern *ocean-trans-indices-village1* ocean-trans-indices) +(define-extern *ocean-mid-indices-village1* ocean-mid-indices) +(define-extern *ocean-mid-masks-village1* ocean-mid-masks) +(define-extern *ocean-spheres-village2* ocean-spheres) +(define-extern *ocean-colors-village2* ocean-colors) +(define-extern *ocean-near-indices-village2* ocean-near-indices) +(define-extern *ocean-trans-indices-village2* ocean-trans-indices) +(define-extern *ocean-mid-indices-village2* ocean-mid-indices) +(define-extern *ocean-mid-masks-village2* ocean-mid-masks) +(define-extern *ocean-near-indices-sunken* ocean-near-indices) +(define-extern *ocean-trans-indices-sunken* ocean-trans-indices) +(define-extern *ocean-mid-indices-sunken* ocean-mid-indices) +(define-extern *ocean-mid-masks-sunken* ocean-mid-masks) +(define-extern *ocean-map-village1* ocean-map) +(define-extern *ocean-map-village2* ocean-map) +(define-extern *ocean-map-sunken* ocean-map) ;; ---------------------- @@ -6951,8 +7046,6 @@ ;; - Types -;;;;;;;;;; -;;;;;;;;;; (deftype sky-color-hour (structure) ((snapshot1 int32 :offset-assert 0) (snapshot2 int32 :offset-assert 4) @@ -6986,12 +7079,12 @@ (r-sun float :offset 16) (r-halo float :offset 20) (r-aurora float :offset 24) - (c-sun-start uint32 :offset 32) - (c-sun-end uint32 :offset 48) - (c-halo-start uint32 :offset 36) - (c-halo-end uint32 :offset 52) - (c-aurora-start uint32 :offset 40) - (c-aurora-end uint32 :offset 56) + (c-sun-start rgba :offset 32) + (c-sun-end rgba :offset 48) + (c-halo-start rgba :offset 36) + (c-halo-end rgba :offset 52) + (c-aurora-start rgba :offset 40) + (c-aurora-end rgba :offset 56) ) :method-count-assert 9 :size-assert #x40 @@ -7023,10 +7116,8 @@ ) (deftype sky-upload-data (basic) - ( - ;(data UNKNOWN 27 :offset-assert 16) - (circle sky-circle-data :inline :offset-assert 16) - (sun sky-sun-data 2 :inline :offset-assert 288) + ((circle sky-circle-data :inline :offset-assert 16) + (sun sky-sun-data 2 :inline :offset-assert 288) (moon sky-moon-data :inline :offset-assert 416) (data uint128 27 :offset 16) ) @@ -7057,7 +7148,7 @@ (giftag-roof qword :inline :offset-assert 32) (giftag-ocean qword :inline :offset-assert 48) (fog vector :inline :offset-assert 64) - (sky uint32 8 :offset-assert 80) + (sky uint32 8 :offset-assert 80) (time float :offset-assert 112) (off-s-0 uint16 :offset-assert 116) (off-t-0 uint16 :offset-assert 118) @@ -7093,10 +7184,10 @@ ;; - Symbols -(define-extern *sky-parms* sky-parms) ;; unknown type -(define-extern *sky-upload-data* sky-upload-data) ;; unknown type -(define-extern *sky-drawn* symbol) ;; unknown type -(define-extern *cloud-drawn* symbol) ;; unknown type +(define-extern *sky-parms* sky-parms) +(define-extern *sky-upload-data* sky-upload-data) +(define-extern *sky-drawn* symbol) +(define-extern *cloud-drawn* symbol) ;; ---------------------- @@ -7110,8 +7201,8 @@ (deftype mood-fog (structure) ((fog-color vector :inline :offset-assert 0) (fog-dists vector :inline :offset-assert 16) - (fog-start float :offset 16) ;; meters - (fog-end float :offset 20) ;;meters + (fog-start meters :offset 16) + (fog-end meters :offset 20) (fog-max float :offset 24) (fog-min float :offset 28) (erase-color vector :inline :offset-assert 32) @@ -7184,6 +7275,7 @@ (itimes vector4w 4 :inline :offset-assert 1856) (state uint8 16 :offset-assert 1920) (num-stars float :offset-assert 1936) + (some-byte uint8 :offset 1939) ) (:methods (new (symbol type) _type_ 0) @@ -7303,9 +7395,9 @@ ;; - Symbols -(define-extern *palette-fade-controls* palette-fade-controls) ;; unknown type -(define-extern *time-of-day-mode* int) ;; unknown type -(define-extern *time-of-day-context* time-of-day-context) ;; unknown type +(define-extern *palette-fade-controls* palette-fade-controls) +(define-extern *time-of-day-mode* int) +(define-extern *time-of-day-context* time-of-day-context) ;; ---------------------- @@ -7450,7 +7542,7 @@ ) (deftype art-mesh-anim (art-element) - () + ((data basic :dynamic)) :method-count-assert 13 :size-assert #x20 :flag-assert #xd00000020 @@ -7480,8 +7572,8 @@ :size-assert #x20 :flag-assert #xf00000020 (:methods - (dummy-13 (_type_) int 13) - (dummy-14 (_type_) int 14) + (link-art! (_type_) art-group 13) + (unlink-art! (_type_) int 14) ) ) @@ -7506,11 +7598,11 @@ (jgeo int32 :offset-assert 8) (janim int32 :offset-assert 12) (bounds vector :inline :offset-assert 16) - (radius float :offset 28) ;; meters + (radius meters :offset 28) (mgeo uint16 4 :offset-assert 32) (max-lod int32 :offset-assert 40) (lod-dist float 4 :offset-assert 44) - (longest-edge float :offset-assert 60) ;; meters + (longest-edge meters :offset-assert 60) (texture-level int8 :offset-assert 64) (version int8 :offset-assert 65) (shadow int8 :offset-assert 66) @@ -7525,7 +7617,7 @@ (declare-type merc-ctrl art-element) (deftype lod-group (structure) ((geo merc-ctrl :offset-assert 0) - (dist float :offset-assert 4) ;; meters + (dist meters :offset-assert 4) ) :pack-me :method-count-assert 9 @@ -7566,7 +7658,7 @@ (cur-lod int8 :offset-assert 62) (desired-lod int8 :offset-assert 63) (ripple ripple-control :offset-assert 64) - (longest-edge float :offset-assert 68) ;; meters + (longest-edge meters :offset-assert 68) (longest-edge? uint32 :offset 68) (light-index uint8 :offset-assert 72) (dummy uint8 2 :offset-assert 73) @@ -7581,7 +7673,7 @@ (shadow-ctrl shadow-control :offset-assert 96) (origin vector :inline :offset-assert 112) (bounds vector :inline :offset-assert 128) - (radius float :offset 140) ;; meters + (radius meters :offset 140) (color-mult rgbaf :inline :offset-assert 144) (color-emissive rgbaf :inline :offset-assert 160) (secondary-interp float :offset-assert 176) @@ -7597,14 +7689,14 @@ (:methods (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 (_type_ int int) int 10) + (dummy-10 (_type_ int) int 10) (dummy-11 (_type_ pointer) int 11) ) ) ;; - Functions -(define-extern new-dynamic-structure (function symbol type int structure)) ;; unknown type +(define-extern new-dynamic-structure (function symbol type int structure)) ;; ---------------------- @@ -7639,8 +7731,8 @@ (deftype generic-constants (structure) ((fog vector :inline :offset-assert 0) - (adgif qword :inline :offset-assert 16) - (giftag qword :inline :offset-assert 32) + (adgif gs-gif-tag :inline :offset-assert 16) ;; was qword + (giftag gs-gif-tag :inline :offset-assert 32) ;; was qword (hvdf-offset vector :inline :offset-assert 48) (hmge-scale vector :inline :offset-assert 64) (invh-scale vector :inline :offset-assert 80) @@ -8472,7 +8564,7 @@ ;; - Symbols -(define-extern *generic-debug* generic-debug) ;; unknown type +(define-extern *generic-debug* generic-debug) ;; ---------------------- @@ -8645,10 +8737,10 @@ ;; - Symbols -(define-extern *shadow-queue* shadow-queue) ;; unknown type -(define-extern *shadow* symbol) ;; unknown type -(define-extern *shadow-object* symbol) ;; unknown type -(define-extern *shadow-debug* symbol) ;; unknown type +(define-extern *shadow-queue* shadow-queue) +(define-extern *shadow* symbol) +(define-extern *shadow-object* symbol) +(define-extern *shadow-debug* symbol) ;; ---------------------- @@ -8751,7 +8843,7 @@ ) (deftype level-buffer-state (structure) - ((name basic :offset-assert 0) + ((name symbol :offset-assert 0) (display? symbol :offset-assert 4) (force-vis? symbol :offset-assert 8) (force-inside? symbol :offset-assert 12) @@ -8780,29 +8872,29 @@ (want-display-level (_type_ symbol symbol) int 12) (want-vis (_type_ symbol) int 13) (want-force-vis (_type_ symbol symbol) int 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-15 (_type_ pair) none 15) + (dummy-16 (_type_ float) int 16) + (dummy-17 (_type_ pair) int 17) + (dummy-18 (_type_) int 18) + (dummy-19 (_type_) int 19) (dummy-20 () none 20) ) ) (deftype continue-point (basic) ((name string :offset-assert 4) - (level basic :offset-assert 8) + (level symbol :offset-assert 8) (flags uint32 :offset-assert 12) (trans vector :inline :offset-assert 16) (quat quaternion :inline :offset-assert 32) (camera-trans vector :inline :offset-assert 48) - (camera-rot float 9 :offset-assert 64) - (load-commands pair :offset-assert 100) - (vis-nick basic :offset-assert 104) - (lev0 basic :offset-assert 108) - (disp0 basic :offset-assert 112) - (lev1 basic :offset-assert 116) - (disp1 basic :offset-assert 120) + (camera-rot float 9 :offset-assert 64) + (load-commands pair :offset-assert 100) + (vis-nick symbol :offset-assert 104) + (lev0 symbol :offset-assert 108) + (disp0 symbol :offset-assert 112) + (lev1 symbol :offset-assert 116) + (disp1 symbol :offset-assert 120) ) :method-count-assert 10 :size-assert #x7c @@ -8855,8 +8947,8 @@ (auto-save-status uint32 :offset-assert 280) (auto-save-card int32 :offset-assert 284) (auto-save-which int32 :offset-assert 288) - (pov-camera-handle uint64 :offset-assert 296) - (other-camera-handle uint64 :offset-assert 304) + (pov-camera-handle handle :offset-assert 296) + (other-camera-handle handle :offset-assert 304) (death-pos vector-array :offset-assert 312) (dummy basic :offset-assert 316) (auto-save-count int32 :offset-assert 320) @@ -8869,7 +8961,7 @@ (initialize! (_type_ symbol game-save string) _type_ 9) (adjust (_type_ symbol float handle) float 10) (task-complete? (_type_ game-task) symbol 11) - (lookup-entity-perm-by-aid (_type_ uint) entity-perm 12) + (lookup-entity-perm-by-aid (_type_ actor-id) entity-perm 12) (get-entity-task-perm (_type_ game-task) entity-perm 13) (copy-perms-from-level! (_type_ level) none 14) (copy-perms-to-level! (_type_ level) none 15) @@ -8891,7 +8983,7 @@ ;; - Symbols -(define-extern *GAME-bank* game-bank) ;; unknown type +(define-extern *GAME-bank* game-bank) (define-extern *game-info* game-info) @@ -8952,10 +9044,10 @@ (rdists vector :inline :offset-assert 48) (next uint32 4 :offset-assert 64) (count uint16 4 :offset-assert 80) - (near-plane float :offset 32) ;; meters - (near-stiff float :offset 36) ;; meters - (mid-plane float :offset 40) ;; meters - (far-plane float :offset 44) ;; meters + (near-plane meters :offset 32) + (near-stiff meters :offset 36) + (mid-plane meters :offset 40) + (far-plane meters :offset 44) (rlength-near float :offset 48) (rlength-stiff float :offset 52) (rlength-mid float :offset 56) @@ -9069,7 +9161,7 @@ (param float 2 :offset-assert 24) (group-sub-index int16 :offset-assert 32) (group-size int16 :offset-assert 34) - (dist float :offset-assert 36) ;; meters + (dist meters :offset-assert 36) (eval-time uint32 :offset-assert 40) (inspector-amount float :offset-assert 44) ) @@ -9081,6 +9173,7 @@ ) ) +(declare-type effect-control basic) (deftype joint-control (basic) ((status uint16 :offset-assert 4) (allocated-length int16 :offset-assert 6) @@ -9089,8 +9182,8 @@ (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) (prebind-function basic :offset-assert 32) - (postbind-function basic :offset-assert 36) - (effect basic :offset-assert 40) + (postbind-function function :offset-assert 36) + (effect effect-control :offset-assert 40) (channel joint-control-channel 3 :inline :offset-assert 48) ;; actually dynamic? (frame-group0 art-joint-anim :offset 60) (frame-num0 float :offset 64) @@ -9277,7 +9370,7 @@ ;; - Symbols -(define-extern *merc-globals* symbol) ;; unknown type +(define-extern *merc-globals* symbol) ;; ---------------------- @@ -9290,7 +9383,7 @@ ;;;; engine (define-extern *background-draw-engine* engine) -(define-extern *matrix-engine* (array handle)) ;; unknown type +(define-extern *matrix-engine* (array handle)) (define-extern *camera-engine* engine) (define-extern *debug-engine* engine) @@ -9335,10 +9428,10 @@ (get-property-value-float (_type_ symbol symbol float float (pointer res-tag) pointer) float :no-virtual 12) (get-tag-index-data (_type_ int) pointer 13) (get-tag-data (_type_ res-tag) pointer 14) - (dummy-15 (_type_ res-tag) res-tag 15) + (allocate-data-memory-for-tag! (_type_ res-tag) res-tag 15) (sort! (_type_) _type_ 16) - (dummy-17 (_type_ res-tag pointer) res-lump 17) - (dummy-18 (_type_ res-tag res-tag) res-lump 18) + (add-data! (_type_ res-tag pointer) res-lump 17) + (add-32bit-data! (_type_ res-tag object) res-lump 18) (lookup-tag-idx (_type_ symbol symbol float) res-tag-pair :no-virtual 19) (make-property-data (_type_ float res-tag-pair pointer) pointer 20) (get-curve-data! (_type_ curve symbol symbol float) symbol 21) @@ -9356,9 +9449,6 @@ ;; Containing DGOs - ['GAME', 'ENGINE'] ;; Version - 3 -;; - Functions - -(define-extern part-group-pointer? function) ;; - Symbols @@ -9395,12 +9485,12 @@ (deftype dynamics (basic) ((name basic :offset-assert 4) - (gravity-max float :offset-assert 8) ;; meters - (gravity-length float :offset-assert 12) ;; meters + (gravity-max meters :offset-assert 8) + (gravity-length meters :offset-assert 12) (gravity vector :inline :offset-assert 16) (gravity-normal vector :inline :offset-assert 32) - (walk-distance float :offset-assert 48) ;; meters - (run-distance float :offset-assert 52) ;; meters + (walk-distance meters :offset-assert 48) + (run-distance meters :offset-assert 52) ) :method-count-assert 9 :size-assert #x38 @@ -9478,48 +9568,48 @@ ;; - Symbols -(define-extern *walk-mods* surface) ;; unknown type -(define-extern *walk-no-turn-mods* surface) ;; unknown type -(define-extern *turn-around-mods* surface) ;; unknown type -(define-extern *duck-mods* surface) ;; unknown type -(define-extern *duck-attack-mods* surface) ;; unknown type -(define-extern *jump-mods* surface) ;; unknown type -(define-extern *double-jump-mods* surface) ;; unknown type -(define-extern *smack-jump-mods* surface) ;; unknown type -(define-extern *high-jump-mods* surface) ;; unknown type -(define-extern *launch-jump-mods* surface) ;; unknown type -(define-extern *forward-high-jump-mods* surface) ;; unknown type -(define-extern *flip-jump-mods* surface) ;; unknown type -(define-extern *forward-jump-mods* surface) ;; unknown type -(define-extern *forward-pole-jump-mods* surface) ;; unknown type -(define-extern *attack-mods* surface) ;; unknown type -(define-extern *jump-attack-mods* surface) ;; unknown type -(define-extern *uppercut-jump-mods* surface) ;; unknown type -(define-extern *run-attack-mods* surface) ;; unknown type -(define-extern *wheel-mods* surface) ;; unknown type -(define-extern *wheel-flip-mods* surface) ;; unknown type -(define-extern *flop-mods* surface) ;; unknown type -(define-extern *flop-land-mods* surface) ;; unknown type -(define-extern *wade-mods* surface) ;; unknown type -(define-extern *swim-mods* surface) ;; unknown type -(define-extern *dive-mods* surface) ;; unknown type -(define-extern *dive-bottom-mods* surface) ;; unknown type -(define-extern *pole-mods* surface) ;; unknown type -(define-extern *grab-mods* surface) ;; unknown type -(define-extern *edge-grab-mods* surface) ;; unknown type -(define-extern *empty-mods* surface) ;; unknown type -(define-extern *neutral-mods* surface) ;; unknown type -(define-extern *stone-surface* surface) ;; unknown type -(define-extern *edge-surface* surface) ;; unknown type -(define-extern *wade-surface* surface) ;; unknown type -(define-extern *slope-surface* surface) ;; unknown type -(define-extern *quicksand-surface* surface) ;; unknown type -(define-extern *tar-surface* surface) ;; unknown type -(define-extern *grass-surface* surface) ;; unknown type -(define-extern *ice-surface* surface) ;; unknown type -(define-extern *tread-surface* surface) ;; unknown type -(define-extern *standard-ground-surface* surface) ;; unknown type -(define-extern *swim-surface* surface) ;; unknown type +(define-extern *walk-mods* surface) +(define-extern *walk-no-turn-mods* surface) +(define-extern *turn-around-mods* surface) +(define-extern *duck-mods* surface) +(define-extern *duck-attack-mods* surface) +(define-extern *jump-mods* surface) +(define-extern *double-jump-mods* surface) +(define-extern *smack-jump-mods* surface) +(define-extern *high-jump-mods* surface) +(define-extern *launch-jump-mods* surface) +(define-extern *forward-high-jump-mods* surface) +(define-extern *flip-jump-mods* surface) +(define-extern *forward-jump-mods* surface) +(define-extern *forward-pole-jump-mods* surface) +(define-extern *attack-mods* surface) +(define-extern *jump-attack-mods* surface) +(define-extern *uppercut-jump-mods* surface) +(define-extern *run-attack-mods* surface) +(define-extern *wheel-mods* surface) +(define-extern *wheel-flip-mods* surface) +(define-extern *flop-mods* surface) +(define-extern *flop-land-mods* surface) +(define-extern *wade-mods* surface) +(define-extern *swim-mods* surface) +(define-extern *dive-mods* surface) +(define-extern *dive-bottom-mods* surface) +(define-extern *pole-mods* surface) +(define-extern *grab-mods* surface) +(define-extern *edge-grab-mods* surface) +(define-extern *empty-mods* surface) +(define-extern *neutral-mods* surface) +(define-extern *stone-surface* surface) +(define-extern *edge-surface* surface) +(define-extern *wade-surface* surface) +(define-extern *slope-surface* surface) +(define-extern *quicksand-surface* surface) +(define-extern *tar-surface* surface) +(define-extern *grass-surface* surface) +(define-extern *ice-surface* surface) +(define-extern *tread-surface* surface) +(define-extern *standard-ground-surface* surface) +(define-extern *swim-surface* surface) ;; ---------------------- @@ -9565,7 +9655,7 @@ ;; - Symbols -(define-extern *pat-mode-info* (inline-array pat-mode-info)) ;; unknown type +(define-extern *pat-mode-info* (inline-array pat-mode-info)) ;; ---------------------- @@ -9580,17 +9670,17 @@ ((eco-level-max float :offset-assert 4) (eco-single-inc float :offset-assert 8) (eco-full-inc float :offset-assert 12) - (eco-single-timeout uint64 :offset-assert 16) ; usec - (eco-full-timeout uint64 :offset-assert 24) ; usec - (dummy uint64 :offset-assert 32) ; usec + (eco-single-timeout seconds :offset-assert 16) + (eco-full-timeout seconds :offset-assert 24) + (dummy seconds :offset-assert 32) (health-max-default float :offset-assert 40) (health-single-inc float :offset-assert 44) (eco-pill-max-default float :offset-assert 48) (health-small-inc float :offset-assert 52) (buzzer-max-default float :offset-assert 56) (buzzer-single-inc float :offset-assert 60) - (suck-bounce-dist float :offset-assert 64) ; meters - (suck-suck-dist float :offset-assert 68) ; meters + (suck-bounce-dist meters :offset-assert 64) + (suck-suck-dist meters :offset-assert 68) (default-pill-inc float :offset-assert 72) ) :method-count-assert 9 @@ -9621,7 +9711,7 @@ ((eco-type int32 :offset-assert 40) (eco-level float :offset-assert 44) (eco-pickup-time uint64 :offset-assert 48) - (eco-timeout uint64 :offset-assert 56) ;; usec + (eco-timeout seconds :offset-assert 56) (health float :offset-assert 64) (health-max float :offset-assert 68) (buzzer float :offset-assert 72) @@ -9646,12 +9736,12 @@ (deftype fact-info-enemy (fact-info) ((speed float :offset-assert 40) - (idle-distance float :offset-assert 44) ; meters - (notice-top float :offset-assert 48) ; meters - (notice-bottom float :offset-assert 52) ; meters - (cam-horz float :offset-assert 56) ; meters - (cam-vert float :offset-assert 60) ; meters - (cam-notice-dist float :offset-assert 64) ; meters + (idle-distance meters :offset-assert 44) + (notice-top meters :offset-assert 48) + (notice-bottom meters :offset-assert 52) + (cam-horz meters :offset-assert 56) + (cam-vert meters :offset-assert 60) + (cam-notice-dist meters :offset-assert 64) ) :method-count-assert 12 :size-assert #x44 @@ -9667,8 +9757,9 @@ ;; - Symbols -(define-extern process-drawable-art-error state) -(define-extern *FACT-bank* fact-bank) ;; unknown type +(declare-type process-drawable process) +(define-extern process-drawable-art-error (state string process-drawable)) +(define-extern *FACT-bank* fact-bank) ;; ---------------------- @@ -9681,13 +9772,13 @@ (deftype align-control (basic) ((flags uint32 :offset-assert 4) - (process process :offset-assert 8) - (frame-group basic :offset-assert 12) + (process process-drawable :offset-assert 8) + (frame-group art-joint-anim :offset-assert 12) (frame-num float :offset-assert 16) (matrix matrix 2 :inline :offset-assert 32) (transform transform 2 :inline :offset-assert 160) (delta transformq :inline :offset-assert 256) - (last-speed float :offset-assert 304);; meters + (last-speed meters :offset-assert 304) (align transformq :inline :offset 160) ) :method-count-assert 14 @@ -9695,11 +9786,11 @@ :flag-assert #xe00000134 (:methods (new (symbol type process) _type_ :behavior process-drawable 0) - (dummy-9 () none 9) - (dummy-10 (_type_ int vector int float) none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) + (TODO-RENAME-9 (_type_) transformq 9) + (TODO-RENAME-10 (_type_ int float float float) trsqv 10) + (TODO-RENAME-11 (_type_ int vector int float float) none 11) ;; 3rd arg is unused + (first-transform (_type_) transform 12) + (snd-transform (_type_) transform 13) ) ) @@ -9712,28 +9803,29 @@ ;; - Types -(declare-type collide-shape basic) -(declare-type water-control basic) -(declare-type sparticle-launch-control basic) (declare-type nav-control basic) (declare-type path-control basic) (declare-type vol-control basic) +(declare-type actor-link-info basic) +(declare-type sparticle-launch-control basic) +(declare-type water-control basic) +(declare-type collide-shape basic) (deftype process-drawable (process) ((root trsqv :offset-assert 112) (node-list cspace-array :offset-assert 116) (draw draw-control :offset-assert 120) (skel joint-control :offset-assert 124) - (nav nav-control :offset-assert 128) + (nav nav-control :offset-assert 128) (align align-control :offset-assert 132) - (path path-control :offset-assert 136) - (vol vol-control :offset-assert 140) + (path path-control :offset-assert 136) + (vol vol-control :offset-assert 140) (fact fact-info :offset-assert 144) - (link basic :offset-assert 148) + (link actor-link-info :offset-assert 148) (part sparticle-launch-control :offset-assert 152) (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) - (state-time uint64 :offset-assert 168) + (state-time seconds :offset-assert 168) ) :heap-base #x40 :method-count-assert 20 @@ -9813,13 +9905,13 @@ (invinc-time uint64 :offset-assert 56) (mask uint32 :offset-assert 64) (mode basic :offset-assert 68) - (shove-back float :offset-assert 72) ;; meters - (shove-up float :offset-assert 76) ;; meters - (speed float :offset-assert 80) ;; meters - (dist float :offset-assert 84) ;; meters + (shove-back meters :offset-assert 72) + (shove-up meters :offset-assert 76) + (speed meters :offset-assert 80) + (dist meters :offset-assert 84) (control float :offset-assert 88) (angle basic :offset-assert 92) - (rotate-to float :offset-assert 96) ;; deg + (rotate-to degrees :offset-assert 96) (prev-state basic :offset-assert 100) ) :method-count-assert 10 @@ -9858,9 +9950,9 @@ ((new-trans-hook function :offset-assert 176) (cur-trans-hook function :offset-assert 180) (cur-event-hook function :offset-assert 184) - (new-joint-anim basic :offset-assert 188) + (new-joint-anim art-joint-anim :offset-assert 188) (new-joint-anim-blend uint64 :offset-assert 192) - (anim-mode basic :offset-assert 200) + (anim-mode symbol :offset-assert 200) (cur-grab-handle uint64 :offset-assert 208) (cur-target-handle uint64 :offset-assert 216) (old-grab-pos vector :inline :offset-assert 224) @@ -9881,7 +9973,7 @@ (deftype part-spawner (process-drawable) ((mode uint32 :offset-assert 176) (enable basic :offset-assert 180) - (radius float :offset-assert 184) ;; meters + (radius meters :offset-assert 184) (world-sphere sphere :inline :offset-assert 192) ) :heap-base #x60 @@ -9970,8 +10062,8 @@ (deftype swingpole (process) ((root basic :offset-assert 112) (dir vector :inline :offset-assert 128) - (range float :offset-assert 144) ;; meters - (edge-length float :offset-assert 148) ;; meters + (range meters :offset-assert 144) + (edge-length meters :offset-assert 148) ) :heap-base #x30 :method-count-assert 14 @@ -10056,7 +10148,7 @@ (:methods (dummy-20 () none 20) (dummy-21 () none 21) - (dummy-22 () none 22) + (pov-camera-playing () none 22) ;; state (dummy-23 () none 23) (dummy-24 () none 24) (dummy-25 () none 25) @@ -10084,15 +10176,15 @@ :size-assert #x8 :flag-assert #x1200000008 (:methods - (dummy-9 (_type_ float) float 9) - (dummy-10 (_type_) float 10) - (dummy-11 (_type_) float 11) - (dummy-12 (_type_ float) float 12) - (dummy-13 (_type_) float 13) - (dummy-14 (_type_ uint float float float) int 14) ;; 3 arg for parent 5 for child - (dummy-15 (_type_ process) float 15) ;; wip - (dummy-16 (_type_ float) float 16) - (dummy-17 (_type_) float 17) + (get-current-value (_type_ float) float 9) + (get-current-phase-no-mod (_type_) float 10) + (get-current-phase (_type_) float 11) + (get-current-value-with-mirror (_type_ float) float 12) + (get-current-phase-with-mirror (_type_) float 13) + (setup-params! (_type_ uint float float float) none 14) + (load-params! (_type_ process uint float float float) symbol 15) + (sync-now! (_type_ float) float 16) + (get-phase-offset (_type_) float 17) ) ) @@ -10103,20 +10195,10 @@ (m2 float :offset-assert 20) (yend float :offset-assert 24) ) + :allow-misaligned :method-count-assert 18 :size-assert #x1c :flag-assert #x120000001c - (:methods - ;; (dummy-9 () none 9) - ;; (dummy-10 () none 10) - ;; (dummy-11 () none 11) - (dummy-12 (_type_ float) float 12) - (dummy-13 (_type_) float 13) - (dummy-14 (_type_ uint float float float) int 14) - (dummy-15 (_type_ process) float 15) ;; wip - ;; (dummy-16 () none 16) - ;; (dummy-17 () none 17) - ) ) (deftype sync-info-paused (sync-info) @@ -10126,17 +10208,6 @@ :method-count-assert 18 :size-assert #x10 :flag-assert #x1200000010 - (:methods - (dummy-9 (_type_ float) float 9) - ;; (dummy-10 () none 10) - (dummy-11 (_type_) float 11) - (dummy-12 (_type_ float) float 12) - (dummy-13 (_type_) float 13) - (dummy-14 (_type_ uint float float float) int 14) - (dummy-15 (_type_ process) float 15) ;; wip - ;; (dummy-16 () none 16) - ;; (dummy-17 () none 17) - ) ) (deftype delayed-rand-float (structure) @@ -10151,8 +10222,8 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (dummy-9 (_type_ int int float) float 9) - (dummy-10 (_type_ ) float 10) + (set-params! (_type_ int int float) float 9) + (update! (_type_ ) float 10) ) ) @@ -10168,8 +10239,8 @@ :size-assert #x18 :flag-assert #xb00000018 (:methods - (dummy-9 (_type_ float float float float) float 9) - (dummy-10 (_type_ float) float 10) + (set-params! (_type_ float float float float) float 9) + (update! (_type_ float) float 10) ) ) @@ -10184,10 +10255,10 @@ :size-assert #x28 :flag-assert #xd00000028 (:methods - (dummy-9 (_type_ float float float float float float float) float 9) - (dummy-10 (_type_ float) float 10) - (dummy-11 (_type_) symbol 11) ;; bool - (dummy-12 (_type_) symbol 12) ;; bool + (set-params! (_type_ float float float float float float float) float 9) + (update! (_type_ float) float 10) + (at-min? (_type_) symbol 11) ;; bool + (at-max? (_type_) symbol 12) ;; bool ) ) @@ -10204,10 +10275,10 @@ :size-assert #x30 :flag-assert #xd00000030 (:methods - (dummy-9 (_type_ int int float float) vector 9) - (dummy-10 (_type_) vector 10) - (dummy-11 (_type_) vector 11) - (dummy-12 (_type_) vector 12) + (set-params! (_type_ int int float float) vector 9) + (update-now! (_type_) vector 10) + (update-with-delay! (_type_) vector 11) + (update-with-delay-or-reset! (_type_) vector 12) ) ) @@ -10223,8 +10294,8 @@ :size-assert #x3c :flag-assert #xb0000003c (:methods - (dummy-9 (_type_ vector float float float) vector 9) - (dummy-10 (_type_ vector) vector 10) + (set-params! (_type_ vector float float float) vector 9) + (update! (_type_ vector) vector 10) ) ) @@ -10258,27 +10329,6 @@ (die-on-next-update! (_type_) _type_ 14) ) ) - ;; trajectory-h - (deftype trajectory (structure) - ((initial-position vector :inline :offset-assert 0) - (initial-velocity vector :inline :offset-assert 16) - (time float :offset-assert 32) - (gravity float :offset-assert 36) ;; meters - ) - :method-count-assert 16 - :size-assert #x28 - :flag-assert #x1000000028 - (:methods - (TODO-RENAME-9 (_type_ float vector) vector 9) - (TODO-RENAME-10 (_type_ float vector) vector 10) - (TODO-RENAME-11 (_type_ vector vector float float) none 11) - (TODO-RENAME-12 (_type_ vector vector float float) none 12) - (TODO-RENAME-13 (_type_ vector vector float float) none 13) - (TODO-RENAME-14 (_type_ vector vector float float) none 14) - (TODO-RENAME-15 (_type_) none 15) - ) - ) - ;; ---------------------- ;; File - trajectory-h @@ -10286,10 +10336,26 @@ ;; Containing DGOs - ['GAME', 'ENGINE'] ;; Version - 3 -;; - Unknowns - -;;(define-extern trajectory object) ;; unknown type + (deftype trajectory (structure) + ((initial-position vector :inline :offset-assert 0) + (initial-velocity vector :inline :offset-assert 16) + (time float :offset-assert 32) + (gravity meters :offset-assert 36) + ) + :method-count-assert 16 + :size-assert #x28 + :flag-assert #x1000000028 + (:methods + (eval-position! (_type_ float vector) vector 9) + (eval-velocity! (_type_ float vector) vector 10) + (setup-from-to-duration! (_type_ vector vector float float) none 11) + (setup-from-to-xz-vel! (_type_ vector vector float float) none 12) + (setup-from-to-y-vel! (_type_ vector vector float float) none 13) + (setup-from-to-height! (_type_ vector vector float float) none 14) + (debug-draw! (_type_) none 15) + ) + ) ;; ---------------------- ;; File - debug-h @@ -10353,8 +10419,8 @@ (notice-time uint64 :offset-assert 112) (flex-blend float :offset-assert 120) (blend float :offset-assert 124) - (max-dist float :offset-assert 128) ;; meters - (ignore-angle float :offset-assert 132) ;; deg + (max-dist meters :offset-assert 128) + (ignore-angle degrees :offset-assert 132) (up uint8 :offset-assert 136) (nose uint8 :offset-assert 137) (ear uint8 :offset-assert 138) @@ -10504,7 +10570,7 @@ ((vertex vector 3 :inline :offset-assert 0) (intersect vector :inline :offset-assert 48) (normal vector :inline :offset-assert 64) - (pat uint32 :offset-assert 80) + (pat pat-surface :offset-assert 80) ) :method-count-assert 9 :size-assert #x54 @@ -10512,9 +10578,9 @@ ) (deftype collide-mesh-tri (structure) - ((vertex-index uint8 3 :offset-assert 0) - (unused uint8 :offset-assert 3) - (pat uint32 :offset-assert 4) + ((vertex-index uint8 3 :offset-assert 0) + (unused uint8 :offset-assert 3) + (pat pat-surface :offset-assert 4) ) :pack-me :method-count-assert 9 @@ -10564,7 +10630,7 @@ ((vertex vector 3 :inline :offset-assert 0) (normal vector :inline :offset-assert 48) (bbox4w bounding-box4w :inline :offset-assert 64) - (pat uint32 :offset 60) + (pat pat-surface :offset 60) ) :method-count-assert 9 :size-assert #x60 @@ -10688,7 +10754,7 @@ (action uint32 :offset 40) (offense int8 :offset 44) (prim-type int8 :offset 45) - (radius float :offset 60) ;; meters + (radius meters :offset 60) ) :method-count-assert 28 :size-assert #x48 @@ -10718,7 +10784,7 @@ ) (deftype collide-shape-prim-sphere (collide-shape-prim) - ((pat uint32 :offset-assert 72) + ((pat pat-surface :offset-assert 72) ) :method-count-assert 28 :size-assert #x4c @@ -10763,7 +10829,7 @@ (max-iteration-count uint8 :offset-assert 144) (nav-flags uint8 :offset-assert 145) (pad-byte uint8 2 :offset-assert 146) - (pat-ignore-mask uint32 :offset-assert 148) + (pat-ignore-mask pat-surface :offset-assert 148) (event-self basic :offset-assert 152) (event-other basic :offset-assert 156) (root-prim collide-shape-prim :offset-assert 160) @@ -10776,7 +10842,6 @@ :flag-assert #x38000000b8 (:methods (new (symbol type process collide-list-enum) _type_) - (dummy-26 () none 26) (dummy-28 () none 28) (dummy-29 () none 29) (dummy-30 () none 30) @@ -10812,9 +10877,9 @@ ((rider-time uint64 :offset-assert 184) (rider-last-move vector :inline :offset-assert 192) (trans-old vector 3 :inline :offset-assert 208) - (poly-pat uint32 :offset-assert 256) - (cur-pat uint32 :offset-assert 260) - (ground-pat uint32 :offset-assert 264) + (poly-pat pat-surface :offset-assert 256) + (cur-pat pat-surface :offset-assert 260) + (ground-pat pat-surface :offset-assert 264) (status uint64 :offset-assert 272) (old-status uint64 :offset-assert 280) (prev-status uint64 :offset-assert 288) @@ -10827,13 +10892,13 @@ (ground-poly-normal vector :inline :offset-assert 368) (ground-touch-point vector :inline :offset-assert 384) (shadow-pos vector :inline :offset-assert 400) - (ground-impact-vel float :offset-assert 416) ;; meters + (ground-impact-vel meters :offset-assert 416) (surface-angle float :offset-assert 420) (poly-angle float :offset-assert 424) (touch-angle float :offset-assert 428) (coverage float :offset-assert 432) (dynam dynamics :offset-assert 436) - (surf basic :offset-assert 440) + (surf surface :offset-assert 440) ) :method-count-assert 65 :size-assert #x1bc @@ -10878,7 +10943,7 @@ (surface-normal vector :inline :offset-assert 80) (time uint64 :offset-assert 96) (status uint64 :offset-assert 104) - (pat uint32 :offset-assert 112) + (pat pat-surface :offset-assert 112) (reaction-flag uint32 :offset-assert 116) ) :method-count-assert 10 @@ -11159,14 +11224,14 @@ (define-extern cspace-by-name (function process-drawable string cspace)) (define-extern cspace-by-name-no-fail (function process-drawable string cspace)) (define-extern cspace-index-by-name-no-fail (function process-drawable string int)) -(define-extern num-func-none (function joint-control-channel float)) -(define-extern num-func-+! (function joint-control-channel float float)) -(define-extern num-func--! (function joint-control-channel float float)) -(define-extern num-func-loop! (function joint-control-channel float float)) +(define-extern num-func-none (function joint-control-channel float float float)) +(define-extern num-func-+! (function joint-control-channel float float float)) +(define-extern num-func--! (function joint-control-channel float float float)) +(define-extern num-func-loop! (function joint-control-channel float float float)) (define-extern num-func-seek! (function joint-control-channel float float float)) -(define-extern num-func-blend-in! (function joint-control-channel float float)) -(define-extern num-func-chan (function joint-control-channel float float)) -(define-extern num-func-identity (function joint-control-channel float)) +(define-extern num-func-blend-in! (function joint-control-channel float float float)) +(define-extern num-func-chan (function joint-control-channel float float float)) +(define-extern num-func-identity (function joint-control-channel float float float)) ;; ---------------------- @@ -11298,8 +11363,8 @@ ;; inherited inspect of process-drawable (:methods (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (projectile-dissipate () none 21) ;; state + (projectile-impact () none 22) ;; state (dummy-23 () none 23) (dummy-24 () none 24) (dummy-25 () none 25) @@ -11327,17 +11392,6 @@ :method-count-assert 29 :size-assert #x1a4 :flag-assert #x1d014001a4 - (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 () none 28) - ) ) @@ -11349,6 +11403,7 @@ ;; - Types +(declare-type sidekick basic) (deftype target (process-drawable) ((control control-info :score 100 :offset 112) (skel2 basic :offset-assert 176) @@ -11358,8 +11413,8 @@ (state-hook-time uint64 :offset-assert 192) (state-hook function :offset-assert 200) (cam-user-mode symbol :offset-assert 204) - (sidekick uint32 :offset-assert 208) - (manipy uint32 :offset-assert 212) + (sidekick (pointer sidekick) :offset-assert 208) + (manipy (pointer manipy) :offset-assert 212) (attack-info attack-info :inline :offset-assert 224) (attack-info-rec attack-info :inline :offset-assert 336) (anim-seed uint64 :offset-assert 440) @@ -11388,7 +11443,7 @@ (deftype sidekick (process-drawable) ((control control-info :offset 112) (anim-seed uint64 :offset 192) - (shadow-in-movie? basic :offset-assert 200) + (shadow-in-movie? symbol :offset-assert 200) ) :heap-base #x60 :method-count-assert 20 @@ -11484,15 +11539,16 @@ (to-spr-waits uint32 :offset-assert 44) (from-spr-waits uint32 :offset-assert 48) ) + :pack-me :method-count-assert 14 :size-assert #x34 :flag-assert #xe00000034 (:methods (dummy-9 (_type_) none 9) - (dummy-10 (_type_) none 10) - (PERF-COUNTER-REG-ACCESS-11 (_type_) none 11) - (PERF-COUNTER-REG-ACCESS-12 (_type_) none 12) - (update-wait-stats-13 (_type_ uint uint uint) none 13) + (print-to-stream (_type_ string basic) none 10) + (reset! (_type_) none 11) + (read! (_type_) none 12) + (update-wait-stats (_type_ uint uint uint) none 13) ) ) @@ -11534,14 +11590,14 @@ (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) - ;; not sure what this is - (unk-data-0 pointer :offset-assert 52) - (unk-data-0-len int32 :offset-assert 56) + ;; some osrt of texture remapping info + (texture-remap-table (pointer uint64) :offset-assert 52) + (texture-remap-table-len int32 :offset-assert 56) (unk-data-1 pointer :offset-assert 60) (unk-data-1-len int32 :offset-assert 64) - (unk-zero-0 uint32 :offset-assert 68) + (unk-zero-0 basic :offset-assert 68) (name symbol :offset-assert 72) (nickname symbol :offset-assert 76) @@ -11551,10 +11607,11 @@ (nodes (inline-array bsp-node) :offset-assert 120) (level level :offset-assert 124) - (unk-data-2 uint32 5 :offset-assert 128) + (current-leaf-idx uint16 :offset-assert 128) + (unk-data-2 uint16 9 :offset-assert 130) (boxes box8s-array :offset-assert 148) - (unk-data-3 uint32 :offset-assert 152) + (current-bsp-back-flags uint32 :offset-assert 152) (ambients drawable-inline-array-ambient :offset-assert 156) (unk-data-4 float :offset-assert 160) (unk-data-5 float :offset-assert 164) @@ -11569,7 +11626,6 @@ :flag-assert #x1400000190 (:methods (relocate (_type_ kheap (pointer uint8)) none :replace 7) - (dummy-17 () none 17) (dummy-18 (_type_) none 18) (dummy-19 (_type_) none 19) ) @@ -12277,7 +12333,7 @@ (dma-level-0 uint32 :offset 32) (dma-base uint32 :offset 36) (dma-level-1 uint32 :offset 40) - (dma-qwc uint32 4 :offset-assert 44) + (dma-qwc uint32 4 :offset 44) (shader uint32 :offset 48) (num-shaders uint8 :offset 52) (num-base-colors uint8 :offset 53) @@ -12312,7 +12368,7 @@ ) (deftype drawable-tree-tfrag (drawable-tree) - () + ((time-of-day-pal time-of-day-palette :offset 12)) :method-count-assert #x12 :size-assert #x24 :flag-assert #x1200000024 @@ -12545,7 +12601,7 @@ (far float 4 :offset-assert 60) ) (:methods - (new (symbol type float float) _type_) + (new (symbol type meters meters) _type_) ) :method-count-assert 9 :size-assert #x4c @@ -12738,8 +12794,8 @@ (user-uint8 uint8 8 :offset 0) (status entity-perm-status :offset-assert 8) (dummy uint8 1 :offset-assert 10) - (task uint8 :offset-assert 11) - (aid uint32 :offset-assert 12) + (task game-task :offset-assert 11) + (aid actor-id :offset-assert 12) (quad uint128 :offset 0) ) :pack-me @@ -12761,8 +12817,8 @@ (trans vector :inline :offset-assert 32) (perm entity-perm :inline :offset-assert 48) (status uint16 :offset 56) ;; overlays - (aid uint32 :offset 60) - (task uint8 :offset 59) + (aid actor-id :offset 60) + (task game-task :offset 59) ) :method-count-assert 10 :size-assert #x40 @@ -12915,9 +12971,9 @@ ;; - Types (deftype sprite-vec-data-2d (structure) - ((x-y-z-sx vector :inline :offset-assert 0) - (flag-rot-sy vector :inline :offset-assert 16) - (r-g-b-a vector :inline :offset-assert 32) + ((x-y-z-sx vector :inline :offset-assert 0 :score -10) + (flag-rot-sy vector :inline :offset-assert 16 :score -10) + (r-g-b-a vector :inline :offset-assert 32 :score -10) (x float :offset 0) (y float :offset 4) (z float :offset 8) @@ -12942,13 +12998,16 @@ ) (deftype sprite-array-2d (basic) - ((num-sprites uint32 2 :offset-assert 4) - (num-valid uint32 2 :offset-assert 12) + ((num-sprites int32 2 :offset-assert 4) + (num-valid int32 2 :offset-assert 12) (vec-data uint32 :offset-assert 20) (adgif-data uint32 :offset-assert 24) (pad uint128 4 :offset-assert 32) (data uint128 1 :offset-assert 96) ) + (:methods + (new (symbol type int int) _type_ 0) + ) :method-count-assert 9 :size-assert #x70 :flag-assert #x900000070 @@ -12981,12 +13040,15 @@ ) (deftype sprite-array-3d (basic) - ((num-sprites uint32 2 :offset-assert 4) - (num-valid uint32 2 :offset-assert 12) + ((num-sprites int32 2 :offset-assert 4) + (num-valid int32 2 :offset-assert 12) (vec-data uint32 :offset-assert 20) (adgif-data uint32 :offset-assert 24) (data uint128 1 :offset-assert 32) ) + (:methods + (new (symbol type int int) _type_ 0) + ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 @@ -13133,8 +13195,8 @@ (deftype sparticle-group-item (structure) ((launcher uint32 :offset-assert 0) - (fade-after float :offset-assert 4) ;; meters - (falloff-to float :offset-assert 8) ;; meters + (fade-after meters :offset-assert 4) + (falloff-to meters :offset-assert 8) (flags uint16 :offset-assert 12) (period uint16 :offset-assert 14) (length uint16 :offset-assert 16) @@ -13211,6 +13273,8 @@ ) +(define-extern part-group-pointer? (function pointer symbol)) + ;; ---------------------- ;; File - sparticle-h ;; Source Path - engine/sparticle/sparticle-h.gc @@ -13309,7 +13373,7 @@ :size-assert #x10 :flag-assert #x1a00000010 (:methods - (new (symbol type process) _type_) + (new (symbol type process) _type_ 0) (get-matching-actor-type-mask (_type_ type) int 9) (actor-count-before (_type_) int 10) (link (_type_) entity-actor 11) @@ -13320,12 +13384,12 @@ (apply-function-forward (_type_ (function entity-actor object object) object) int 16) (apply-function-reverse (_type_ (function entity-actor object object) object) int 17) (apply-all (_type_ (function entity-actor object object) object) int 18) - (send-to-all (_type_ object) none 19) - (send-to-all-after (_type_ object) object 20) - (send-to-all-before (_type_ object) object 21) - (send-to-next-and-prev (_type_ object) none 22) - (send-to-next (_type_ object) none 23) - (send-to-prev (_type_ object) none 24) + (send-to-all (_type_ symbol) none 19) + (send-to-all-after (_type_ symbol) object 20) + (send-to-all-before (_type_ symbol) object 21) + (send-to-next-and-prev (_type_ symbol) none 22) + (send-to-next (_type_ symbol) none 23) + (send-to-prev (_type_ symbol) none 24) (actor-count (_type_) int 25) ) ) @@ -13354,12 +13418,12 @@ (joypad uint32 :offset-assert 8) (min-detectable-velocity float :offset-assert 12) (attack-timeout uint64 :offset-assert 16) - (default-string-max-y float :offset-assert 24) ; meters - (default-string-min-y float :offset-assert 28) ; meters - (default-string-max-z float :offset-assert 32) ; meters - (default-string-min-z float :offset-assert 36) ; meters - (default-string-push-z float :offset-assert 40) ; meters - (default-tilt-adjust float :offset-assert 44) ; deg + (default-string-max-y meters :offset-assert 24) + (default-string-min-y meters :offset-assert 28) + (default-string-max-z meters :offset-assert 32) + (default-string-min-z meters :offset-assert 36) + (default-string-push-z meters :offset-assert 40) + (default-tilt-adjust degrees :offset-assert 44) ) :method-count-assert 9 :size-assert #x30 @@ -13368,14 +13432,14 @@ (deftype cam-index (structure) ((flags uint32 :offset-assert 0) - (vec uint128 2 :offset-assert 16) + (vec vector 2 :inline :offset 16) ) :method-count-assert 11 :size-assert #x30 :flag-assert #xb00000030 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-9 (_type_ symbol entity vector curve) symbol 9) + (dummy-10 (_type_ vector) float 10) ; inlined vector-dot issue? ) ) @@ -13401,7 +13465,7 @@ ) (deftype tracking-spline (structure) - ((point tracking-point 32 :inline :offset-assert 0) + ((point tracking-point 32 :inline :offset-assert 0) (summed-len float :offset-assert 1536) (free-point int32 :offset-assert 1540) (used-point int32 :offset-assert 1544) @@ -13420,20 +13484,20 @@ :size-assert #x664 :flag-assert #x1800000664 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (TODO-RENAME-9 (_type_) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) (dummy-11 () none 11) (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (TODO-RENAME-13 (_type_ int) none 13) + (TODO-RENAME-14 (_type_ vector) none 14) + (TODO-RENAME-15 (_type_) none 15) + (TODO-RENAME-16 (_type_ float) none 16) + (TODO-RENAME-17 (_type_ vector float float symbol) int 17) ; - return value is actually none but they do a manual `return` + (TODO-RENAME-18 (_type_ float vector tracking-spline-sampler) vector 18) + (TODO-RENAME-19 (_type_ float vector tracking-spline-sampler) vector 19) + (TODO-RENAME-20 (_type_ vector int) none 20) + (TODO-RENAME-21 (_type_ vector float float) vector 21) + (TODO-RENAME-22 (_type_ float) none 22) (dummy-23 () none 23) ) ) @@ -13453,8 +13517,8 @@ (:methods (init-cam-float-seeker (_type_ float float float float) none 9) (copy-cam-float-seeker (_type_ _type_) none 10) - (TODO-RENAME-11 (_type_ float) none 11) - (TODO-RENAME-12 (_type_ float) float 12) + (update! (_type_ float) none 11) + (jump-to-target! (_type_ float) float 12) ) ) @@ -13470,8 +13534,8 @@ :size-assert #x3c :flag-assert #xb0000003c (:methods - (TODO-RENAME-9 (_type_ vector float float float) none 9) - (TODO-RENAME-10 (_type_ vector) none 10) + (init! (_type_ vector float float float) none 9) + (update! (_type_ vector) none 10) ) ) @@ -13493,7 +13557,7 @@ ) (deftype camera-combiner (process) - ((trans vector :inline :offset-assert 112) + ((trans vector :score 999 :inline :offset-assert 112) (inv-camera-rot matrix :inline :offset-assert 128) (fov float :offset-assert 192) (interp-val float :offset-assert 196) @@ -13514,13 +13578,14 @@ ) (deftype camera-slave (process) - ((trans vector :inline :offset-assert 112) + ((trans vector :score 999 :inline :offset-assert 112) (fov float :offset-assert 128) (fov0 float :offset-assert 132) (fov1 float :offset-assert 136) (fov-index cam-index :inline :offset-assert 144) (tracking cam-rotation-tracker :inline :offset-assert 192) (view-off-param float :offset-assert 400) + (unknown-symbol symbol :offset 412) ;; from - cam-combiner::lambda2 - I'm convinced `camera-slave` is the only matching process in this case (view-off vector :inline :offset-assert 416) (min-z-override float :offset-assert 432) (view-flat vector :inline :offset-assert 448) @@ -13533,7 +13598,7 @@ (max-angle-offset float :offset-assert 2192) (max-angle-curr float :offset-assert 2196) (options uint32 :offset-assert 2200) - (cam-entity basic :offset-assert 2204) + (cam-entity entity :offset-assert 2204) ; not totally confirmed yet, could be entity-actor (velocity vector :inline :offset-assert 2208) (desired-pos vector :inline :offset-assert 2224) (time-dist-too-far uint32 :offset-assert 2240) @@ -13555,7 +13620,7 @@ (spline-tt float :offset-assert 2480) (spline-follow-dist float :offset-assert 2484) (change-event-from uint32 :offset-assert 2488) - (enter-has-run basic :offset-assert 2492) + (enter-has-run symbol :offset-assert 2492) (blend-from-type uint64 :offset-assert 2496) (blend-to-type uint64 :offset-assert 2504) (have-phony-joystick basic :offset-assert 2512) @@ -13575,11 +13640,11 @@ (deftype camera-master (process) ((master-options uint32 :offset-assert 112) (num-slaves int32 :offset-assert 116) - (slave basic 2 :offset-assert 120) + (slave (pointer camera-slave) 2 :offset-assert 120) (slave-options uint32 :offset-assert 128) (view-off-param-save float :offset-assert 132) (changer uint32 :offset-assert 136) - (cam-entity basic :offset-assert 140) + (cam-entity entity :offset-assert 140) ; not totally confirmed yet (stringMinLength float :offset-assert 144) (stringMaxLength float :offset-assert 148) (stringMinHeight float :offset-assert 152) @@ -13687,7 +13752,7 @@ (define-extern *camera-init-mat* matrix) (define-extern *camera* camera-master) (define-extern *camera-combiner* camera-combiner) -(define-extern *camera-orbit-target* process-drawable) +(define-extern *camera-orbit-target* (pointer process-drawable)) ;; ---------------------- @@ -13969,7 +14034,7 @@ (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 () none 19) - (dummy-20 () none 20) + (hidden? (_type_) symbol 20) (dummy-21 () none 21) (dummy-22 () none 22) (TODO-RENAME-23 (_type_ symbol symbol) none 23) @@ -14158,7 +14223,7 @@ (dest-pos vector :inline :offset-assert 32) (current-poly nav-poly :offset-assert 48) (next-poly nav-poly :offset-assert 52) - (len float :offset-assert 56) ;; meters + (len meters :offset-assert 56) (last-edge int8 :offset-assert 60) (terminated basic :offset-assert 64) (reached-dest basic :offset-assert 68) @@ -14314,7 +14379,7 @@ (next-poly nav-poly :offset-assert 32) (target-poly nav-poly :offset-assert 36) (portal nav-route-portal 2 :offset-assert 40) ;; guess - (nearest-y-threshold float :offset-assert 48) ;; meters + (nearest-y-threshold meters :offset-assert 48) (event-temp vector :inline :offset-assert 64) (old-travel vector :inline :offset-assert 80) (blocked-travel vector :inline :offset-assert 96) @@ -14432,7 +14497,7 @@ (define-extern str-load (function string int pointer int symbol)) (define-extern str-load-status (function (pointer int32) symbol)) (define-extern str-load-cancel (function none)) -(define-extern str-play-async (function string pointer none)) +(define-extern str-play-async (function string sound-id none)) (define-extern str-play-stop (function string none)) (define-extern str-play-queue (function string none)) (define-extern str-ambient-play (function string none)) @@ -14519,19 +14584,19 @@ ;; - Types (deftype sound-iop-info (basic) - ((frame uint32 :offset 16) + ((frame uint32 :offset 16) (strpos int32 :offset-assert 20) - (str-id uint32 :offset-assert 24) - (str-id-sign int32 :offset 24) + (str-id sound-id :offset-assert 24) + (str-id-sign int32 :offset 24) (freemem uint32 :offset-assert 28) - (chinfo uint8 48 :offset-assert 32) + (chinfo uint8 48 :offset-assert 32) (freemem2 uint32 :offset-assert 80) (nocd uint32 :offset-assert 84) (dirtycd uint32 :offset-assert 88) - (diskspeed uint32 2 :offset-assert 92) + (diskspeed uint32 2 :offset-assert 92) (lastspeed uint32 :offset-assert 100) (dupseg int32 :offset-assert 104) - (times uint32 41 :offset-assert 108) + (times uint32 41 :offset-assert 108) (times-seq uint32 :offset-assert 272) ) :method-count-assert 9 @@ -14578,8 +14643,8 @@ (define-extern sound-command->string (function sound-command string)) (define-extern sound-name= (function sound-name sound-name symbol)) (define-extern str-is-playing? (function symbol)) -(define-extern current-str-id (function int)) -(define-extern current-str-pos (function int int)) +(define-extern current-str-id (function sound-id)) +(define-extern current-str-pos (function sound-id int)) (define-extern is-cd-in? (function symbol)) (define-extern check-irx-version (function int)) (define-extern sound-bank-load (function sound-name sound-id)) @@ -14592,7 +14657,7 @@ (define-extern sound-buffer-dump (function int)) (define-extern swap-sound-buffers (function vector vector float int)) (define-extern free-last-sound-buffer-entry (function int)) -(define-extern sound-basic-cb function) +(define-extern sound-basic-cb (function int (pointer int32) none)) (define-extern sound-set-volume (function uint float int)) (define-extern sound-set-reverb (function int float float uint int)) (define-extern sound-pause (function sound-id int)) @@ -14634,7 +14699,7 @@ (define-extern matrix<-no-trans-transformq! (function matrix transformq matrix)) (define-extern matrix<-transformq+trans! (function matrix transformq vector matrix)) (define-extern matrix<-transformq+world-trans! (function matrix transformq vector matrix)) -(define-extern matrix<-parented-transformq! (function matrix transformq quaternion matrix)) +(define-extern matrix<-parented-transformq! (function matrix transformq vector matrix)) ;; ---------------------- @@ -14645,12 +14710,13 @@ ;; - Functions -(define-extern ray-sphere-intersect (function vector vector vector vector float)) -(define-extern raw-ray-sphere-intersect (function vector float)) -(define-extern ray-circle-intersect (function vector vector vector vector float)) +;; pt, u, sphere, rad +(define-extern ray-sphere-intersect (function vector vector vector float float)) +(define-extern raw-ray-sphere-intersect (function float float)) +(define-extern ray-circle-intersect (function vector vector vector float float)) (define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) (define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) -(define-extern ray-triangle-intersect (function vector)) ;; NOTE - didn't bother to check input args +(define-extern ray-triangle-intersect (function vector vector float matrix vector vector float)) (define-extern collide-do-primitives (function float)) ;; NOTE - didn't bother to check input args (define-extern moving-sphere-sphere-intersect (function vector vector vector vector float)) (define-extern moving-sphere-moving-sphere-intersect (function vector vector vector vector float)) @@ -14677,7 +14743,7 @@ (define-extern create-interpolated-joint-animation-frame (function joint-control int process-drawable int)) (define-extern mem-size (function basic symbol int int)) (define-extern jacc-mem-usage (function pointer memory-usage-block int int)) -(define-extern joint-anim-inspect-elt (function joint-anim float int)) +(define-extern joint-anim-inspect-elt (function joint-anim float joint-anim)) (define-extern joint-anim-login (function joint-anim-drawable joint-anim-drawable)) (define-extern joint-control-channel-eval (function joint-control-channel float)) (define-extern joint-control-channel-eval! (function joint-control-channel (function joint-control-channel float float float) float)) @@ -14724,7 +14790,6 @@ ;; - Functions -;; TODO - not decompiling correctly due to vector-dot-product again i believe (define-extern ray-arbitrary-circle-intersect (function vector vector vector vector float float)) (define-extern camera-line (function vector vector vector none)) @@ -14748,11 +14813,11 @@ ;; - Functions -(define-extern print-cl-stat function) -(define-extern clear-cl-stat function) -(define-extern mem-usage-bsp-tree function) -(define-extern bsp-camera-asm function) -(define-extern print-collide-stats function) +(define-extern print-cl-stat (function cl-stat string none)) +(define-extern clear-cl-stat (function cl-stat none)) +(define-extern mem-usage-bsp-tree (function bsp-header bsp-node memory-usage-block int none)) +(define-extern bsp-camera-asm (function bsp-header vector none)) +(define-extern print-collide-stats (function none)) ;; - Unknowns @@ -14767,32 +14832,51 @@ ;; - Functions -(define-extern perf-stat-bucket->string function) -(define-extern print-tr-stat function) -(define-extern clear-tr-stat function) -(define-extern print-terrain-stats function) -(define-extern update-subdivide-settings! function) -(define-extern set-tfrag-dists! function) -(define-extern start-perf-stat-collection function) -(define-extern end-perf-stat-collection function) -(define-extern print-perf-stats function) +(defenum perf-stat-bucket + (all-code 0) + (mercneric 1) + (tie-generic 2) + (background 3) + (drawable 4) + (tfrag 5) + (tfrag-near 6) + (inst-shrub 7) + (proto-shrub 8) + (inst-tie 9) + (proto-tie-g 10) + (proto-tie 11) + (proto-tie-n 12) + (bones 13) + (nav 14) + (collide 15) + (camera 16)) + +(define-extern perf-stat-bucket->string (function perf-stat-bucket string)) +(define-extern print-tr-stat (function tr-stat string string none)) +(define-extern clear-tr-stat (function tr-stat none)) +(define-extern print-terrain-stats (function none)) +(define-extern update-subdivide-settings! (function subdivide-settings math-camera int none)) +(define-extern set-tfrag-dists! (function (pointer float) none)) +(define-extern start-perf-stat-collection (function none)) +(define-extern end-perf-stat-collection (function none)) +(define-extern print-perf-stats (function none)) ;; - Unknowns (define-extern *subdivide-settings* subdivide-settings) (define-extern *tfrag-work* tfrag-work) ;; unknown type (define-extern *perf-stats* perf-stat-array) ;; unknown type -;;(define-extern *merc-global-stats* object) ;; unknown type -;;(define-extern *stat-string-tfrag-near* object) ;; unknown type -;;(define-extern *stat-string-tfrag* object) ;; unknown type -;;(define-extern *stat-string-total* object) ;; unknown type +(define-extern *merc-global-stats* merc-global-stats) +(define-extern *stat-string-tfrag-near* string) +(define-extern *stat-string-tfrag* string) ;; unknown type +(define-extern *stat-string-total* string) ;; unknown type (define-extern *terrain-context* terrain-context) ;; unknown type -;;(define-extern GSH_ENABLE object) ;; unknown type -;;(define-extern GSH_BUCKET object) ;; unknown type -;;(define-extern GSH_WHICH_STAT object) ;; unknown type -;;(define-extern GSH_MAX_DISPLAY object) ;; unknown type -;;(define-extern GSH_TIME object) ;; unknown type -;;(define-extern *gomi-stats-hack* object) ;; unknown type +(define-extern GSH_ENABLE symbol) ;; unknown type +(define-extern GSH_BUCKET bucket-id) ;; unknown type +(define-extern GSH_WHICH_STAT int) ;; unknown type +(define-extern GSH_MAX_DISPLAY basic) ;; unknown type +(define-extern GSH_TIME int) ;; unknown type +(define-extern *gomi-stats-hack* (inline-array perf-stat)) ;; unknown type ;; ---------------------- @@ -14803,104 +14887,115 @@ ;; - Types -; (deftype sprite-header (structure) -; ((header UNKNOWN 1 :offset-assert 0) -; (num-sprites int32 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype sprite-header (structure) + ( + (header qword 1 :inline :offset-assert 0) + (num-sprites int32 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype sprite-hvdf-data (structure) -; ((data UNKNOWN 76 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x4c0 -; :flag-assert #x9000004c0 -; ) +(deftype sprite-hvdf-data (structure) + ((data qword 76 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4c0 + :flag-assert #x9000004c0 + ) -; (deftype sprite-hvdf-control (structure) -; ((alloc UNKNOWN 76 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x4c -; :flag-assert #x90000004c -; ) +(deftype sprite-hvdf-control (structure) + ((alloc int8 76 :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) -; (deftype sprite-aux-list (basic) -; ((num-entries int32 :offset-assert 4) -; (entry int32 :offset-assert 8) -; (data UNKNOWN 1 :offset-assert 12) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype sprite-aux-list (basic) + ((num-entries int32 :offset-assert 4) + (entry int32 :offset-assert 8) + (data sprite-vec-data-2d 1 :offset-assert 12) ;; likely 4-bytes each + ) + (:methods + (new (symbol type int) _type_ 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype sprite-frame-data (structure) -; ((data UNKNOWN 41 :offset-assert 0) -; (cdata UNKNOWN 16 :offset-assert 0) -; (fdata UNKNOWN 25 :offset-assert 256) -; (xy-array UNKNOWN 8 :offset-assert 0) -; (st-array UNKNOWN 4 :offset-assert 128) -; (xyz-array UNKNOWN 4 :offset-assert 192) -; (hmge-scale vector :inline :offset-assert 256) -; (consts vector :inline :offset-assert 272) -; (pfog0 float :offset-assert 272) -; (deg-to-rad float :offset-assert 276) -; (min-scale float :offset-assert 280) -; (inv-area float :offset-assert 284) -; (adgif-giftag qword :inline :offset-assert 288) -; (sprite-2d-giftag qword :inline :offset-assert 304) -; (sprite-2d-giftag-2 qword :inline :offset-assert 320) -; (sincos-01 vector :inline :offset-assert 336) -; (sincos-23 vector :inline :offset-assert 352) -; (sincos-45 vector :inline :offset-assert 368) -; (sincos-67 vector :inline :offset-assert 384) -; (sincos-89 vector :inline :offset-assert 400) -; (basis-x vector :inline :offset-assert 416) -; (basis-y vector :inline :offset-assert 432) -; (sprite-3d-giftag qword :inline :offset-assert 448) -; (screen-shader adgif-shader :inline :offset-assert 464) -; (clipped-giftag qword :inline :offset-assert 544) -; (inv-hmge-scale vector :inline :offset-assert 560) -; (stq-offset vector :inline :offset-assert 576) -; (stq-scale vector :inline :offset-assert 592) -; (rgba-plain qword :inline :offset-assert 608) -; (warp-giftag qword :inline :offset-assert 624) -; (fog-clamp vector :inline :offset-assert 640) -; (fog-min float :offset-assert 640) -; (fog-max float :offset-assert 644) -; (max-scale float :offset-assert 648) -; ) -; :method-count-assert 9 -; :size-assert #x290 -; :flag-assert #x900000290 -; ) +(deftype sprite-frame-data (structure) + ( + ;(data UNKNOWN 41 :offset-assert 0) + (cdata vector 16 :inline :offset-assert 0) + ;(fdata UNKNOWN 25 :offset-assert 256) + ;(xy-array UNKNOWN 8 :offset-assert 0) + ;(st-array UNKNOWN 4 :offset-assert 128) + ;(xyz-array UNKNOWN 4 :offset-assert 192) + (hmge-scale vector :inline :offset 256) + (consts vector :inline :offset-assert 272 :score -100.) + (pfog0 float :offset 272) + (deg-to-rad float :offset 276) + (min-scale float :offset 280) + (inv-area float :offset 284) + ;(adgif-giftag qword :inline :offset-assert 288) + (adgif-giftag gs-gif-tag :inline :offset-assert 288) + (sprite-2d-giftag gs-gif-tag :inline :offset-assert 304) + (sprite-2d-giftag-2 gs-gif-tag :inline :offset-assert 320) + ;;(sprite-2d-giftag qword :inline :offset-assert 304) + ;;(sprite-2d-giftag-2 qword :inline :offset-assert 320) + (sincos-01 vector :inline :offset-assert 336) + (sincos-23 vector :inline :offset-assert 352) + (sincos-45 vector :inline :offset-assert 368) + (sincos-67 vector :inline :offset-assert 384) + (sincos-89 vector :inline :offset-assert 400) + (basis-x vector :inline :offset-assert 416) + (basis-y vector :inline :offset-assert 432) + ;;(sprite-3d-giftag qword :inline :offset-assert 448) + (sprite-3d-giftag gs-gif-tag :inline :offset-assert 448) + (screen-shader adgif-shader :inline :offset-assert 464) + ;;(clipped-giftag qword :inline :offset-assert 544) + (clipped-giftag gs-gif-tag :inline :offset-assert 544) + (inv-hmge-scale vector :inline :offset-assert 560) + (stq-offset vector :inline :offset-assert 576) + (stq-scale vector :inline :offset-assert 592) + (rgba-plain qword :inline :offset-assert 608) + ;;(warp-giftag qword :inline :offset-assert 624) + (warp-giftag gs-gif-tag :inline :offset-assert 624) + (fog-clamp vector :inline :offset-assert 640) + (fog-min float :offset 640) + (fog-max float :offset 644) + (max-scale float :offset 648) + ) + :method-count-assert 9 + :size-assert #x290 + :flag-assert #x900000290 + ) ;; - Functions -(define-extern sprite-init-distorter function) -(define-extern sprite-draw-distorters function) -(define-extern sprite-add-frame-data function) -(define-extern sprite-add-matrix-data function) -(define-extern sprite-add-3d-all function) -(define-extern sprite-add-2d-all function) -(define-extern sprite-add-shadow-all function) -(define-extern sprite-add-shadow-chunk function) -(define-extern sprite-setup-header function) -(define-extern sprite-add-3d-chunk function) -(define-extern sprite-add-2d-chunk function) -(define-extern sprite-setup-frame-data function) -(define-extern clear-sprite-aux-list function) -(define-extern add-to-sprite-aux-list function) -(define-extern sprite-set-3d-quaternion! function) -(define-extern sprite-get-3d-quaternion! function) -(define-extern sprite-draw function) -(define-extern sprite-allocate-user-hvdf function) -(define-extern sprite-release-user-hvdf function) -(define-extern sprite-get-user-hvdf function) +(define-extern sprite-init-distorter (function dma-buffer uint none)) +(define-extern sprite-draw-distorters (function dma-buffer none)) +(define-extern sprite-add-frame-data (function dma-buffer uint none)) +(define-extern sprite-add-matrix-data (function dma-buffer uint none)) +(define-extern sprite-add-3d-all (function sprite-array-3d dma-buffer int none)) +(define-extern sprite-add-2d-all (function sprite-array-2d dma-buffer int none)) +(define-extern sprite-add-shadow-all (function fake-shadow-buffer dma-buffer none)) +(define-extern sprite-add-shadow-chunk (function fake-shadow-buffer int int dma-buffer none)) +(define-extern sprite-setup-header (function sprite-header int none)) +(define-extern sprite-add-3d-chunk (function sprite-array-3d int int dma-buffer none)) +(define-extern sprite-add-2d-chunk (function sprite-array-2d int int dma-buffer int none)) +(define-extern sprite-setup-frame-data (function sprite-frame-data int none)) +(define-extern clear-sprite-aux-list (function none)) +(define-extern add-to-sprite-aux-list function) ;; it's a callback. +(define-extern sprite-set-3d-quaternion! (function sprite-vec-data-3d quaternion quaternion)) +(define-extern sprite-get-3d-quaternion! (function quaternion sprite-vec-data-3d quaternion)) +(define-extern sprite-draw (function display none)) +(define-extern sprite-allocate-user-hvdf (function int)) +(define-extern sprite-release-user-hvdf (function int none)) +(define-extern sprite-get-user-hvdf (function int qword)) ;; - Symbols @@ -14908,12 +15003,12 @@ ;; - Unknowns -;;(define-extern *sprite-hvdf-data* object) ;; unknown type -;;(define-extern *sprite-hvdf-control* object) ;; unknown type -;;(define-extern sprite-vu1-block object) ;; unknown type -;;(define-extern *sprite-array-3d* object) ;; unknown type -;;(define-extern *sprite-array-2d* object) ;; unknown type -;;(define-extern *sprite-aux-list* object) ;; unknown type +(define-extern *sprite-hvdf-data* sprite-hvdf-data) ;; unknown type +(define-extern *sprite-hvdf-control* sprite-hvdf-control) ;; unknown type +(define-extern sprite-vu1-block vu-function) ;; unknown type +(define-extern *sprite-array-3d* sprite-array-3d) ;; unknown type +(define-extern *sprite-array-2d* sprite-array-2d) ;; unknown type +(define-extern *sprite-aux-list* sprite-aux-list) ;; ---------------------- @@ -14924,23 +15019,23 @@ ;; - Types -; (deftype sprite-distorter-sine-tables (basic) -; ((aspx float :offset-assert 4) -; (aspy float :offset-assert 8) -; (entry UNKNOWN 128 :offset-assert 16) -; (ientry UNKNOWN 9 :offset-assert 2064) -; (giftag qword :inline :offset-assert 2208) -; (color qword :inline :offset-assert 2224) -; ) -; :method-count-assert 9 -; :size-assert #x8c0 -; :flag-assert #x9000008c0 -; ) +(deftype sprite-distorter-sine-tables (basic) + ((aspx float :offset-assert 4) + (aspy float :offset-assert 8) + (entry vector 128 :inline :offset-assert 16) + (ientry qword 9 :inline :offset-assert 2064) + (giftag gs-gif-tag :inline :offset-assert 2208) ;; was qword + (color qword :inline :offset-assert 2224) + ) + :method-count-assert 9 + :size-assert #x8c0 + :flag-assert #x9000008c0 + ) ;; - Unknowns -;;(define-extern *sprite-distorter-sine-tables* object) ;; unknown type -;;(define-extern sprite-distort-vu1-block object) ;; unknown type +(define-extern *sprite-distorter-sine-tables* sprite-distorter-sine-tables) +(define-extern sprite-distort-vu1-block vu-function) ;; ---------------------- @@ -15026,7 +15121,7 @@ (define-extern get-debug-text-3d (function debug-text-3d)) (define-extern internal-draw-debug-text-3d (function bucket-id string vector rgba vector2h pointer)) (define-extern get-debug-line (function debug-line)) -(define-extern internal-draw-debug-line (function bucket-id vector vector rgba symbol rgba object)) +(define-extern internal-draw-debug-line (function bucket-id vector vector rgba symbol rgba pointer)) (define-extern draw-string (function string dma-buffer font-context float)) (define-extern transform-float-point (function vector vector vector)) (define-extern add-debug-point (function symbol bucket-id vector symbol)) ;; unused @@ -15038,7 +15133,7 @@ (define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol)) (define-extern add-debug-box (function symbol bucket-id vector vector rgba symbol)) (define-extern add-debug-sphere-with-transform (function symbol bucket-id vector float matrix rgba symbol)) -(define-extern add-debug-spheres (function symbol bucket-id (pointer float) int rgba symbol)) +(define-extern add-debug-spheres (function symbol bucket-id (inline-array vector) int rgba symbol)) (define-extern add-debug-circle (function symbol bucket-id vector float rgba matrix symbol)) (define-extern add-debug-rot-matrix (function symbol bucket-id matrix vector matrix)) (define-extern add-debug-yrot-vector (function symbol bucket-id vector float float rgba symbol)) @@ -15055,7 +15150,7 @@ ;; - Unknowns -(define-extern add-debug-vector (function symbol bucket-id vector vector float rgba symbol)) +(define-extern add-debug-vector (function symbol bucket-id vector vector meters rgba symbol)) (define-extern *debug-lines* (inline-array debug-line)) (define-extern *debug-lines-trk* debug-tracking-thang) (define-extern *debug-text-3ds* (inline-array debug-text-3d)) @@ -15070,7 +15165,7 @@ ;; - Unknowns -;;(define-extern merc-vu1-block object) ;; unknown type +(define-extern merc-vu1-block vu-function) ;; ---------------------- @@ -15301,7 +15396,7 @@ (define-extern bones-init function) (define-extern draw-bones-mtx-calc function) (define-extern bones-mtx-calc function) -(define-extern bones-mtx-calc-execute function) +(define-extern bones-mtx-calc-execute (function none)) (define-extern bones-wrapup function) (define-extern dump-qword function) (define-extern bones-debug function) @@ -15321,9 +15416,9 @@ ;;(define-extern bones-vu0-block object) ;; unknown type ;;(define-extern *texscroll-globals* object) ;; unknown type ;;(define-extern *use-generic* object) ;; unknown type -;;(define-extern *merc-global-array* object) ;; unknown type +(define-extern *merc-global-array* merc-global-array) ;; unknown type ;;(define-extern *bones-first* object) ;; unknown type -;;(define-extern *default-shadow-settings* object) ;; unknown type +(define-extern *default-shadow-settings* shadow-settings) ;; ---------------------- @@ -15345,7 +15440,7 @@ ;; - Functions -(define-extern generic-init-buf (function dma-buffer int uint none)) +(define-extern generic-init-buf (function dma-buffer int gs-zbuf none)) (define-extern generic-dma-foreground-sink-init (function generic-dma-foreground-sink none)) (define-extern generic-init-buffers (function symbol)) (define-extern generic-sink (function int generic-dma-foreground-sink)) @@ -15363,13 +15458,13 @@ ;; - Functions -(define-extern generic-add-constants function) -(define-extern generic-setup-constants function) +(define-extern generic-add-constants (function dma-buffer int none)) +(define-extern generic-setup-constants (function generic-constants int none)) (define-extern generic-reset-buffers function) ;; - Unknowns -;;(define-extern generic-vu1-block object) ;; unknown type +(define-extern generic-vu1-block vu-function) ;; ---------------------- @@ -15444,7 +15539,7 @@ (define-extern high-speed-reject function) (define-extern generic-merc-execute-asm function) (define-extern generic-merc-add-to-cue function) -(define-extern generic-merc-execute-all function) +(define-extern generic-merc-execute-all (function none)) ;; - Unknowns @@ -15542,7 +15637,7 @@ (define-extern shadow-add-single-edges function) (define-extern shadow-add-double-tris function) (define-extern shadow-add-double-edges function) -(define-extern shadow-execute-all function) +(define-extern shadow-execute-all (function dma-buffer shadow-queue none)) ;; - Symbols @@ -15599,7 +15694,7 @@ ;; - Unknowns -;;(define-extern shadow-vu1-block object) ;; unknown type +(define-extern shadow-vu1-block vu-function) ;;(define-extern *shadow-vu1-tri-template* object) ;; unknown type @@ -15611,7 +15706,7 @@ ;; - Functions -(define-extern depth-cue-draw-front function) +(define-extern depth-cue-draw-front (function dma-buffer int float float uint int none)) (define-extern depth-cue-set-stencil function) (define-extern depth-cue-draw-depth function) (define-extern depth-cue-calc-z function) @@ -15619,7 +15714,7 @@ ;; - Unknowns -;;(define-extern *depth-cue-work* object) ;; unknown type +(define-extern *depth-cue-work* depth-cue-work) ;; ---------------------- @@ -15681,8 +15776,8 @@ (define-extern draw-drawable-tree-ice-tfrag function) (define-extern tie-near-make-perspective-matrix function) (define-extern draw-drawable-tree-instance-tie function) -(define-extern init-background function) -(define-extern finish-background function) +(define-extern init-background (function none)) +(define-extern finish-background (function none)) ;; - Symbols @@ -15705,7 +15800,7 @@ (define-extern collide-cache-using-line-sphere-test function) (define-extern collide-cache-using-y-probe-test function) -(define-extern collide-cache-using-box-test function) +(define-extern collide-cache-using-box-test (function vector symbol)) (define-extern draw-node-cull function) @@ -15725,7 +15820,7 @@ (define-extern shrub-upload-view-data function) (define-extern shrub-init-view-data function) (define-extern mem-usage-shrub-walk function) -(define-extern shrub-make-perspective-matrix function) +(define-extern shrub-make-perspective-matrix (function matrix none)) (define-extern shrub-time function) (define-extern draw-inline-array-instance-shrub function) (define-extern draw-prototype-inline-array-shrub function) @@ -15734,7 +15829,7 @@ ;; - Unknowns -;;(define-extern shrub-vu1-block object) ;; unknown type +(define-extern shrub-vu1-block vu-function) ;; ---------------------- @@ -15759,7 +15854,7 @@ ;; - Unknowns -;;(define-extern tnear-vu1-block object) ;; unknown type +(define-extern tnear-vu1-block vu-function) ;; ---------------------- @@ -15785,7 +15880,7 @@ ;; - Unknowns -;;(define-extern tfrag-vu1-block object) ;; unknown type +(define-extern tfrag-vu1-block vu-function) ;;(define-extern t-stat object) ;; unknown type ;;(define-extern *tfrag-display-stats* object) ;; unknown type @@ -15851,7 +15946,7 @@ ;; - Unknowns -;;(define-extern tie-vu1-block object) ;; unknown type +(define-extern tie-vu1-block vu-function) ;; ---------------------- @@ -15891,7 +15986,7 @@ ;; - Unknowns -;;(define-extern tie-near-vu1-block object) ;; unknown type +(define-extern tie-near-vu1-block vu-function) ;; ---------------------- @@ -16022,7 +16117,7 @@ (define-extern sp-launch-particles-var function) (define-extern sp-get-particle function) (define-extern particle-adgif function) -(define-extern lookup-part-group-by-name function) +(define-extern lookup-part-group-by-name (function string basic)) (define-extern lookup-part-group-pointer-by-name function) (define-extern unlink-part-group-by-heap (function kheap int)) (define-extern particle-setup-adgif function) @@ -16124,13 +16219,14 @@ (define-extern ja-channel-push! (function int int int)) (define-extern ja-channel-set! (function int int)) (define-extern kill-current-level-hint (function pair pair symbol none)) -(define-extern level-hint-surpress! function) +(define-extern level-hint-surpress! (function none)) (define-extern ja-aframe-num (function int float)) -(define-extern ja-abort-spooled-anim function) -(define-extern art-group-load-check function) -(define-extern drawable-load function) -(define-extern art-load function) -(define-extern ja-play-spooled-anim function) +(define-extern ja-abort-spooled-anim (function spool-anim art-joint-anim int int :behavior process-drawable)) +(define-extern art-group-load-check (function string kheap int art-group)) +(define-extern drawable-load (function drawable kheap drawable)) +(define-extern art-load (function string kheap art)) +(define-extern ja-play-spooled-anim (function spool-anim art-joint-anim art-joint-anim (function process-drawable symbol) int :behavior process-drawable)) +(define-extern link (function pointer pointer int kheap int pointer)) ;; - Symbols @@ -16140,8 +16236,8 @@ ;; - Unknowns (define-extern *art-control* external-art-control) -;;(define-extern *preload-spool-anims* object) ;; unknown type -;;(define-extern *stack-top* object) ;; unknown type +(define-extern *preload-spool-anims* symbol) +(define-extern *stack-top* pointer) ;; ---------------------- @@ -16211,17 +16307,17 @@ :size-assert #x10 :flag-assert #xc00000010 (:methods - (dummy-9 () none 9) + (dummy-9 (_type_ vector int float process-drawable) none 9) (dummy-10 () none 10) (dummy-11 () none 11) ) ) (deftype process-taskable (process-drawable) - ((tasks basic :offset-assert 176) + ((tasks task-control :offset-assert 176) (query gui-query :inline :offset-assert 180) (old-target-pos transformq :inline :offset-assert 208) - (cell-for-task uint8 :offset-assert 256) + (cell-for-task game-task :offset-assert 256) (cell-x uint64 :offset-assert 264) (cam-joint-index int32 :offset-assert 272) (skippable basic :offset-assert 276) @@ -16248,41 +16344,40 @@ :method-count-assert 53 :size-assert #x17c :flag-assert #x350110017c - ;; inherited inspect of process-drawable (:methods (dummy-20 () none 20) - (dummy-21 () none 21) + (give-cell () none 21) ;; state (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 () none 24) + (enter-playing () none 23) ;; state + (play-accept () none 24) ;; state (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 () none 28) + (query () none 26) ;; state + (play-anim () none 27) ;; state + (hidden () none 28) ;; state (dummy-29 () none 29) - (dummy-30 () none 30) - (dummy-31 () none 31) - (dummy-32 () none 32) - (dummy-33 () none 33) - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) + (idle () none 30) ;; state + (dummy-31 (_type_) none 31) + (dummy-32 (_type_ symbol) spool-anim 32) + (dummy-33 (_type_) none 33) + (dummy-34 (_type_) none 34) + (dummy-35 (_type_) none 35) + (dummy-36 (_type_) none 36) + (dummy-37 (_type_) none 37) + (dummy-38 (_type_) none 38) + (dummy-39 (_type_) none 39) + (dummy-40 (_type_ object skeleton-group int int vector int) none 40) + (dummy-41 (_type_) none 41) + (dummy-42 (_type_) none 42) + (dummy-43 (_type_) none 43) + (dummy-44 (_type_) none 44) + (dummy-45 (_type_) none 45) + (dummy-46 (_type_) none 46) + (dummy-47 (_type_) none 47) + (dummy-48 (_type_) none 48) + (dummy-49 (_type_) none 49) + (dummy-50 (_type_) none 50) + (dummy-51 (_type_) none 51) + (dummy-52 (_type_) none 52) ) ) @@ -16302,7 +16397,7 @@ (define-extern close-specific-task! (function game-task task-status int)) (define-extern reset-all-hint-controls (function none)) (define-extern reset-actors (function symbol none)) -(define-extern set-blackout-frames (function int uint)) +(define-extern set-blackout-frames (function int int)) (define-extern set-master-mode (function symbol none)) (define-extern stop (function symbol int)) (define-extern start (function symbol continue-point target)) @@ -16822,75 +16917,72 @@ ;; - Functions -(define-extern clear-mood-times function) -(define-extern update-mood-quick function) -(define-extern update-mood-flames function) -(define-extern update-mood-light function) -(define-extern target-joint-pos function) -(define-extern update-mood-itimes function) -(define-extern update-mood-fog (function mood-fog mood-lights-table none)) -(define-extern update-mood-sky-texture function) -(define-extern update-mood-palette function) -(define-extern update-mood-interp function) -(define-extern update-mood-lightning function) -(define-extern update-mood-lava function) -(define-extern update-light-kit function) -(define-extern set-target-light-index function) -(define-extern update-mood-caustics function) -(define-extern update-mood-jungleb-blue function) -(define-extern update-mood-prt-color function) -(define-extern update-mood-default function) -(define-extern update-mood-misty function) -(define-extern update-mood-village2 function) -(define-extern update-mood-swamp function) -(define-extern update-mood-village1 function) -(define-extern update-mood-jungle function) -(define-extern update-mood-jungleb function) -(define-extern update-mood-sunken function) -(define-extern update-mood-rolling function) -(define-extern update-mood-firecanyon function) -(define-extern update-mood-training function) -(define-extern update-mood-maincave function) -(define-extern update-mood-darkcave function) -(define-extern update-mood-robocave function) -(define-extern update-mood-snow function) -(define-extern update-mood-village3 function) -(define-extern update-mood-lavatube function) -(define-extern update-mood-ogre function) -(define-extern update-mood-finalboss function) -(define-extern update-mood-citadel function) +(define-extern clear-mood-times (function mood-context symbol)) +(define-extern update-mood-quick (function mood-context int int int int vector)) +(define-extern update-mood-flames (function mood-context int int int float float float none)) +(define-extern update-mood-light (function mood-context int int int float float float int none)) +(define-extern target-joint-pos (function vector)) ;; TODO - unconfirmed +(define-extern update-mood-itimes (function mood-context none)) ;; TODO - implement VFTOI12 and PPACH +(define-extern update-mood-fog (function mood-context float vector)) +(define-extern update-mood-sky-texture (function mood-context float vector)) +(define-extern update-mood-palette (function mood-context float int float)) +(define-extern update-mood-interp (function mood-context mood-context mood-context float none)) +(define-extern update-mood-lightning (function mood-context int int int int float symbol none)) ;; TODO - asm - ret not verified +(define-extern update-mood-lava (function mood-context float int symbol none)) +(define-extern update-light-kit (function light-group light float float)) +(define-extern set-target-light-index (function int int)) +(define-extern update-mood-caustics (function mood-context int int float)) ;; TODO - double check +(define-extern update-mood-jungleb-blue (function mood-context float int vector)) +(define-extern update-mood-prt-color (function mood-context vector)) +(define-extern update-mood-default (function mood-context float int none)) +(define-extern update-mood-misty (function mood-context float float none)) +(define-extern update-mood-village2 (function mood-context float int none)) +(define-extern update-mood-swamp (function mood-context float int none)) +(define-extern update-mood-village1 (function mood-context float int none)) +(define-extern update-mood-jungle (function mood-context float int none)) +(define-extern update-mood-jungleb (function mood-context float int none)) +(define-extern update-mood-sunken (function mood-context float int none)) +(define-extern update-mood-rolling (function mood-context float int none)) +(define-extern update-mood-firecanyon (function mood-context float int none)) +(define-extern update-mood-training (function mood-context float int none)) +(define-extern update-mood-maincave (function mood-context float int none)) +(define-extern update-mood-darkcave (function mood-context float int none)) +(define-extern update-mood-robocave (function mood-context float int none)) +(define-extern update-mood-snow (function mood-context float int none)) ;; TODO - weirdness with `state` on `mood-context` +(define-extern update-mood-village3 (function mood-context float int none)) +(define-extern update-mood-lavatube (function mood-context float int none)) +(define-extern update-mood-ogre (function mood-context float int none)) +(define-extern update-mood-finalboss (function mood-context float int none)) +(define-extern update-mood-citadel (function mood-context float int none)) ;; - Symbols (define-extern *time-of-day-proc* (pointer time-of-day-proc)) - -;; - Unknowns - -;;(define-extern *lightning-time2* object) ;; unknown type -;;(define-extern *rolling-spheres-on* object) ;; unknown type -;;(define-extern *rolling-spheres-light0* object) ;; unknown type -;;(define-extern *rolling-spheres-light1* object) ;; unknown type -;;(define-extern *rolling-spheres-light2* object) ;; unknown type -;;(define-extern *rolling-spheres-light3* object) ;; unknown type -;;(define-extern *rolling-spheres-light4* object) ;; unknown type -;;(define-extern *flash0* object) ;; unknown type -;;(define-extern *flash1* object) ;; unknown type -;;(define-extern *flash2* object) ;; unknown type -;;(define-extern *flash3* object) ;; unknown type -;;(define-extern *flash4* object) ;; unknown type -;;(define-extern *flash5* object) ;; unknown type -;;(define-extern *flash6* object) ;; unknown type -;;(define-extern *flash7* object) ;; unknown type -;;(define-extern *lightning-index* object) ;; unknown type -;;(define-extern *lightning-time* object) ;; unknown type -;;(define-extern *lightning-frame-done* object) ;; unknown type -;;(define-extern *lightning-realtime-done* object) ;; unknown type -;;(define-extern *thunder-id0* object) ;; unknown type -;;(define-extern *thunder-id1* object) ;; unknown type -;;(define-extern *thunder-id2* object) ;; unknown type -;;(define-extern *thunder-id* object) ;; unknown type -;;(define-extern *thunder-count* object) ;; unknown type -;;(define-extern *lava-time* object) ;; unknown type +(define-extern *lightning-time2* float) ;; TODO - guess +(define-extern *rolling-spheres-on* (inline-array vector)) ;; 11 vectors +(define-extern *rolling-spheres-light0* vector) ;; TODO - what is going on here... +(define-extern *rolling-spheres-light1* (inline-array vector)) ; TODO - what is going on here... +(define-extern *rolling-spheres-light2* light-ellipse) +(define-extern *rolling-spheres-light3* (inline-array vector)) +(define-extern *rolling-spheres-light4* vector) ;; TODO - what is going on here... +(define-extern *flash0* (array float)) +(define-extern *flash1* (array float)) +(define-extern *flash2* (array float)) +(define-extern *flash3* (array float)) +(define-extern *flash4* (array float)) +(define-extern *flash5* (array float)) +(define-extern *flash6* (array float)) +(define-extern *flash7* (array float)) +(define-extern *lightning-index* int) +(define-extern *lightning-time* float) ;; a guess, might be uint (useconds) +(define-extern *lightning-frame-done* symbol) +(define-extern *lightning-realtime-done* symbol) +(define-extern *thunder-id0* sound-id) +(define-extern *thunder-id1* sound-id) +(define-extern *thunder-id2* sound-id) +(define-extern *thunder-id* sound-id) +(define-extern *thunder-count* int) +(define-extern *lava-time* int) ;; TODO - guess ;; ---------------------- @@ -16910,7 +17002,7 @@ ;; - Unknowns -;;(define-extern group-rain-screend-drop object) ;; unknown type +(define-extern group-rain-screend-drop sparticle-launch-group) ;; not confirmed ;; ---------------------- @@ -16929,7 +17021,7 @@ (define-extern time-of-day-setup (function symbol int none)) ;; not confirmed (define-extern set-time-of-day function) (define-extern init-time-of-day-context (function time-of-day-context none)) -(define-extern update-time-of-day function) +(define-extern update-time-of-day (function time-of-day-context none)) ;; - Unknowns @@ -16947,10 +17039,10 @@ ;; - Functions (define-extern sky-set-sun-radii (function sky-parms int float float float symbol)) -(define-extern sky-set-sun-colors (function sky-parms int uint uint uint uint symbol)) -(define-extern sky-set-sun-colors-sun (function sky-parms int uint uint symbol)) -(define-extern sky-set-sun-colors-halo (function sky-parms int uint uint symbol)) -(define-extern sky-set-sun-colors-aurora (function sky-parms int uint uint symbol)) +(define-extern sky-set-sun-colors (function sky-parms int rgba rgba rgba rgba symbol)) +(define-extern sky-set-sun-colors-sun (function sky-parms int rgba rgba symbol)) +(define-extern sky-set-sun-colors-halo (function sky-parms int rgba rgba symbol)) +(define-extern sky-set-sun-colors-aurora (function sky-parms int rgba rgba symbol)) (define-extern sky-set-orbit (function sky-parms int float float float float float float symbol)) @@ -16996,7 +17088,7 @@ ;; - Unknowns -;;(define-extern sky-vu1-block object) ;; unknown type +(define-extern sky-vu1-block vu-function) ;; ---------------------- @@ -17021,7 +17113,7 @@ (define-extern clip-polygon-against-negative-hyperplane function) (define-extern sky-duplicate-polys function) (define-extern sky-tng-setup-clouds function) -(define-extern render-sky-tng function) +(define-extern render-sky-tng (function time-of-day-context none)) ;; - Unknowns @@ -17125,14 +17217,14 @@ (define-extern load-state-want-levels (function symbol symbol int)) (define-extern load-state-want-display-level (function symbol symbol int)) (define-extern load-state-want-force-vis (function symbol symbol int)) -(define-extern command-get-param function) -(define-extern entity-birth-no-kill function) +(define-extern command-get-param (function object symbol symbol)) +(define-extern entity-birth-no-kill (function entity none)) (define-extern part-tracker-init function) -(define-extern command-list-get-process function) -(define-extern command-get-quoted-param function) -(define-extern command-get-int function) -(define-extern ambient-hint-spawn function) -(define-extern command-get-float function) +(define-extern command-list-get-process (function object process)) +(define-extern command-get-quoted-param (function object symbol symbol)) +(define-extern command-get-int (function object int int)) +(define-extern ambient-hint-spawn (function symbol symbol process-tree none)) +(define-extern command-get-float (function object float float)) (define-extern process-by-ename function) (define-extern point-in-polygon function) (define-extern try-corner function) @@ -17170,7 +17262,7 @@ (define-extern lb-set-camera function) (define-extern lb-set-player function) (define-extern lb-copy function) -(define-extern render-boundaries function) +(define-extern render-boundaries (function none)) (define-extern command-get-time function) ;; - Unknowns @@ -17267,19 +17359,20 @@ ;; - Functions (define-extern set-font-color-alpha function) -(define-extern load-game-text-info function) +(define-extern load-game-text-info (function string symbol kheap int)) (define-extern load-level-text-files (function int none)) (define-extern draw-debug-text-box function) (define-extern print-game-text-scaled function) (define-extern disable-level-text-file-loading function) (define-extern enable-level-text-file-loading function) +(define-extern link (function pointer pointer int kheap int pointer)) ;; - Unknowns -;;(define-extern *level-text-file-load-flag* object) ;; unknown type -;;(define-extern *game-text-line* object) ;; unknown type -;;(define-extern *game-text-word* object) ;; unknown type -;;(define-extern text-is-loading object) ;; unknown type +(define-extern *level-text-file-load-flag* symbol) +(define-extern *game-text-line* string) +(define-extern *game-text-word* string) +(define-extern text-is-loading symbol) ;; ---------------------- @@ -17438,7 +17531,7 @@ (define-extern find-ground-point function) (define-extern default-collision-reaction function) (define-extern simple-collision-reaction function) -(define-extern collide-shape-draw-debug-marks function) +(define-extern collide-shape-draw-debug-marks (function none)) (define-extern debug-report-col-stats function) ;; - Unknowns @@ -17533,24 +17626,24 @@ (process process :offset-assert 8) (joint-index int32 :offset-assert 12) (top-y-offset float :offset-assert 16) - (ripple-size float :offset-assert 20) ; meters + (ripple-size meters :offset-assert 20) (enter-water-time uint64 :offset-assert 24) (wade-time uint64 :offset-assert 32) (on-water-time uint64 :offset-assert 40) (enter-swim-time uint64 :offset-assert 48) (swim-time uint64 :offset-assert 56) - (base-height float :offset-assert 64) ; meters - (wade-height float :offset-assert 68) ; meters - (swim-height float :offset-assert 72) ; meters - (surface-height float :offset-assert 76) ; meters - (bottom-height float :offset-assert 80) ; meters - (height float :offset-assert 84) ; meters + (base-height meters :offset-assert 64) + (wade-height meters :offset-assert 68) + (swim-height meters :offset-assert 72) + (surface-height meters :offset-assert 76) + (bottom-height meters :offset-assert 80) + (height meters :offset-assert 84) (height-offset float 4 :offset-assert 88) - (real-ocean-offset float :offset 88) ; meters - (ocean-offset float :offset 92) ; meters - (bob-offset float :offset 96) ; meters - (align-offset float :offset 100) ; meters - (swim-depth float :offset-assert 104) ; meters + (real-ocean-offset meters :offset 88) + (ocean-offset meters :offset 92) + (bob-offset meters :offset 96) + (align-offset meters :offset 100) + (swim-depth meters :offset-assert 104) (bob smush-control :inline :offset-assert 112) (volume uint64 :offset-assert 144) ;; handle? (bottom vector 2 :inline :offset-assert 160) @@ -17561,7 +17654,7 @@ (drip-wetness float :offset-assert 260) (drip-time uint64 :offset-assert 264) (drip-speed float :offset-assert 272) - (drip-height float :offset-assert 276) ; meters + (drip-height meters :offset-assert 276) (drip-mult float :offset-assert 280) ) :method-count-assert 17 @@ -17581,10 +17674,10 @@ ) (deftype water-vol (process-drawable) - ((water-height float :offset-assert 176) ;; meters - (wade-height float :offset-assert 180) ;; meters - (swim-height float :offset-assert 184) ;; meters - (bottom-height float :offset-assert 188) ;; meters + ((water-height meters :offset-assert 176) + (wade-height meters :offset-assert 180) + (swim-height meters :offset-assert 184) + (bottom-height meters :offset-assert 188) (attack-event basic :offset-assert 192) (target uint64 :offset-assert 200) (flags uint32 :offset-assert 208) @@ -17595,8 +17688,8 @@ :flag-assert #x1e007000d4 ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (water-vol-idle () none 20) ;; state + (water-vol-startup () none 21) ;; state (dummy-22 () none 22) (dummy-23 () none 23) (dummy-24 () none 24) @@ -17617,47 +17710,46 @@ ;; - Functions -(define-extern vector-into-frustum-nosmooth! function) -(define-extern slave-matrix-blend-2 function) -(define-extern mat-remove-z-rot function) -(define-extern parameter-ease-sin-clamp function) -(define-extern cam-slave-get-intro-step function) -(define-extern cam-slave-get-float function) -(define-extern cam-slave-init-vars function) -(define-extern cam-calc-follow! function) -(define-extern slave-set-rotation! function) -(define-extern camera-slave-debug function) -(define-extern camera-line-rel-len function) -(define-extern cam-slave-get-flags function) -(define-extern cam-slave-get-vector-with-offset function) -(define-extern cam-slave-get-fov function) -(define-extern cam-slave-get-interp-time function) -(define-extern cam-slave-get-rot function) -(define-extern cam-state-from-entity function) -(define-extern parameter-ease-none function) -(define-extern parameter-ease-clamp function) -(define-extern parameter-ease-lerp-clamp function) -(define-extern parameter-ease-sqrt-clamp function) -(define-extern fourth-power function) -(define-extern third-power function) -(define-extern parameter-ease-sqr-clamp function) -(define-extern cam-slave-go function) -(define-extern cam-slave-init function) -(define-extern cam-standard-event-handler function) -(define-extern cam-curve-pos function) -(define-extern cam-curve-setup function) -(define-extern v-slrp2! function) -(define-extern v-slrp3! function) +(define-extern vector-into-frustum-nosmooth! (function matrix vector float vector)) +(define-extern slave-matrix-blend-2 (function matrix float vector matrix matrix)) +(define-extern mat-remove-z-rot (function matrix vector matrix)) +(define-extern parameter-ease-sin-clamp (function float float)) +(define-extern cam-slave-get-intro-step (function entity float)) +(define-extern cam-slave-get-float (function entity symbol float float)) +(define-extern cam-slave-init-vars (function none :behavior camera-slave)) +(define-extern cam-calc-follow! (function cam-rotation-tracker vector symbol vector)) +(define-extern slave-set-rotation! (function cam-rotation-tracker vector float float symbol none)) +(define-extern camera-slave-debug (function object object object object object)) ;; passed to engine::method-15 +(define-extern camera-line-rel-len (function tracking-point vector float rgba none)) +(define-extern cam-slave-get-flags (function entity symbol uint128)) +(define-extern cam-slave-get-vector-with-offset (function entity-actor vector symbol symbol)) +(define-extern cam-slave-get-fov (function entity float)) +(define-extern cam-slave-get-interp-time (function entity float)) +(define-extern cam-slave-get-rot (function entity-actor quaternion quaternion)) +(define-extern cam-state-from-entity (function entity state)) +(define-extern parameter-ease-none (function object object)) ;; stubbed and unused +(define-extern parameter-ease-clamp (function float float)) ;; unused +(define-extern parameter-ease-lerp-clamp (function float float)) ;; unused +(define-extern parameter-ease-sqrt-clamp (function float float)) ;; unused +(define-extern fourth-power (function float float)) ;; unused +(define-extern third-power (function float float)) ;; unused +(define-extern parameter-ease-sqr-clamp (function float float)) +(define-extern cam-slave-go (function camera-slave none)) +(define-extern cam-slave-init (function state entity none :behavior camera-slave)) +(define-extern cam-standard-event-handler (function process int symbol event-message-block object :behavior camera-slave)) +(define-extern cam-curve-pos (function vector vector curve symbol vector :behavior camera-slave)) +(define-extern cam-curve-setup (function vector none :behavior camera-slave)) +(define-extern v-slrp2! (function vector vector vector float vector float vector)) +(define-extern v-slrp3! (function vector vector vector vector float vector)) -;; - Unknowns - -;;(define-extern *cam-res-string* object) ;; unknown type -;;(define-extern cam-circular object) ;; unknown type -;;(define-extern cam-standoff-read-entity object) ;; unknown type -;;(define-extern cam-spline object) ;; unknown type -;;(define-extern *camera-base-mode* object) ;; unknown type -;;(define-extern cam-fixed-read-entity object) ;; unknown type +;; - Symbols +(define-extern *cam-res-string* string) +(define-extern cam-circular state) +(define-extern cam-standoff-read-entity state) +(define-extern cam-spline state) +(define-extern *camera-base-mode* state) +(define-extern cam-fixed-read-entity state) ;; ---------------------- ;; File - cam-interface @@ -17685,9 +17777,9 @@ ;; - Types (deftype camera-master-bank (basic) - ((onscreen-head-height float :offset-assert 4) ;; meters - (onscreen-foot-height float :offset-assert 8) ;; meters - (target-height float :offset-assert 12) ;; meters + ((onscreen-head-height meters :offset-assert 4) + (onscreen-foot-height meters :offset-assert 8) + (target-height meters :offset-assert 12) (up-move-to-pitch-ratio-in-air float :offset-assert 16) (down-move-to-pitch-ratio-in-air float :offset-assert 20) (up-move-to-pitch-on-ground float :offset-assert 24) @@ -17726,20 +17818,21 @@ (define-extern setup-slave-for-hopefull function) (define-extern master-is-hopeful-better? function) (define-extern target-cam-pos function) -(define-extern cam-master-init function) +(define-extern cam-master-init (function none :behavior camera-master)) ;; - Symbols (define-extern cam-free-floating state) +(define-extern cam-master-active state) +(define-extern list-keeper-active state) +(define-extern *CAMERA_MASTER-bank* camera-master-bank) + ;; - Unknowns -;;(define-extern cam-master-active object) ;; unknown type -;;(define-extern list-keeper-active object) ;; unknown type ;;(define-extern cam-fixed object) ;; unknown type ;;(define-extern cam-decel object) ;; unknown type ;;(define-extern cam-eye object) ;; unknown type -;;(define-extern *CAMERA_MASTER-bank* object) ;; unknown type ;; ---------------------- @@ -17844,15 +17937,18 @@ (define-extern cam-circular-code function) (define-extern cam-circular-position function) (define-extern cam-circular-position-into-max-angle function) -(define-extern cam-standoff-calc-trans function) +(define-extern cam-standoff-calc-trans (function cam-rotation-tracker vector symbol none)) ;; not confirmed (define-extern string-push-help function) (define-extern cam-draw-collide-cache function) +;; - Symbols + +(define-extern cam-string state) + ;; - Unknowns ;;(define-extern *CAM_BIKE-bank* object) ;; unknown type ;;(define-extern *CAM_STICK-bank* object) ;; unknown type -;;(define-extern cam-string object) ;; unknown type ;;(define-extern *CAM_STRING-bank* object) ;; unknown type ;;(define-extern *CAM_BILLY-bank* object) ;; unknown type ;;(define-extern *CAM_EYE-bank* object) ;; unknown type @@ -17876,8 +17972,8 @@ ;; - Types (deftype cam-point-watch-bank (basic) - ((speed float :offset-assert 4) - (rot-speed float :offset-assert 8) ;; deg + ((speed float :offset-assert 4) + (rot-speed degrees :offset-assert 8) ) :method-count-assert 9 :size-assert #xc @@ -17885,8 +17981,8 @@ ) (deftype cam-free-bank (basic) - ((speed float :offset-assert 4) - (rot-speed float :offset-assert 8) ;; deg + ((speed float :offset-assert 4) + (rot-speed degrees :offset-assert 8) ) :method-count-assert 9 :size-assert #xc @@ -17929,17 +18025,20 @@ ;; - Functions -(define-extern cam-free-floating-move function) -(define-extern cam-free-floating-input function) +(define-extern cam-free-floating-move (function matrix vector vector int vector)) +(define-extern cam-free-floating-input (function vector vector symbol int vector)) + +;; - Symbols + +(define-extern *CAM_FREE-bank* cam-free-bank) ;; - Unknowns ;;(define-extern *camera-orbit-info* object) ;; unknown type ;;(define-extern *CAM_ORBIT-bank* object) ;; unknown type -;;(define-extern *CAM_FREE-bank* object) ;; unknown type ;;(define-extern *CAM_POINT_WATCH-bank* object) ;; unknown type ;;(define-extern cam-point-watch object) ;; unknown type -;;(define-extern cam-orbit object) ;; unknown type +(define-extern cam-orbit state) ;; unknown type ;; ---------------------- @@ -17950,11 +18049,11 @@ ;; - Functions -(define-extern cam-combiner-init function) +(define-extern cam-combiner-init (function none :behavior camera-combiner)) -;; - Unknowns +;; - Symbols -;;(define-extern cam-combiner-active object) ;; unknown type +(define-extern cam-combiner-active state) ;; ---------------------- @@ -17965,20 +18064,20 @@ ;; - Functions -(define-extern move-camera-from-pad function) -(define-extern update-view-planes function) -(define-extern update-visible function) -(define-extern set-point function) -(define-extern plane-from-points function) -(define-extern update-camera (function none)) +(define-extern move-camera-from-pad (function math-camera math-camera)) +(define-extern update-view-planes (function math-camera (inline-array plane) float float)) +(define-extern update-visible (function math-camera symbol)) ;; second/third arg unused +(define-extern set-point (function vector float float float float)) +(define-extern plane-from-points (function (inline-array plane) vector vector vector int float)) +(define-extern update-camera (function symbol)) -;; - Unknowns +;; - Symbols -;;(define-extern *start-timer* object) ;; unknown type -;;(define-extern *timer-value* object) ;; unknown type -;;(define-extern *start-pos* object) ;; unknown type -;;(define-extern *save-camera-inv-rot* object) ;; unknown type -;;(define-extern *update-leaf-when-outside-bsp* object) ;; unknown type +(define-extern *start-timer* int) +(define-extern *timer-value* int) +(define-extern *start-pos* vector) +(define-extern *save-camera-inv-rot* matrix) +(define-extern *update-leaf-when-outside-bsp* symbol) ;; boolean ;; ---------------------- @@ -18174,7 +18273,7 @@ (define-extern v-slrp! function) (define-extern interp-test-deg function) (define-extern camera-line-setup (function vector none)) -(define-extern camera-line-draw function) +(define-extern camera-line-draw (function vector vector rgba none)) (define-extern cam-layout-intersect-dist function) (define-extern clmf-button-test function) (define-extern clmf-bna function) @@ -18352,9 +18451,9 @@ ;; - Functions -(define-extern cam-stop function) -(define-extern reset-cameras function) -(define-extern cam-start function) +(define-extern cam-stop (function state)) +(define-extern reset-cameras (function none)) ;; defined in entity.gc +(define-extern cam-start (function symbol none)) ;; ---------------------- @@ -18365,7 +18464,7 @@ ;; - Functions -(define-extern process-entity-status! (function process int symbol symbol)) +(define-extern process-entity-status! (function process entity-perm-status symbol int)) (define-extern process-grab? (function process symbol)) (define-extern process-release? (function process symbol)) (define-extern ja-post (function int)) @@ -18595,7 +18694,7 @@ (define-extern line-in-view-frustum? function) (define-extern process-drawable-random-point! function) -(define-extern process-drawable-from-entity! function) +(define-extern process-drawable-from-entity! (function process-drawable object none)) (define-extern cam-launcher-long-joystick function) (define-extern hide-hud-quick function) (define-extern command-get-process function) @@ -18725,8 +18824,8 @@ ; (flop-radius meters :offset-assert 512) ; (flop0-offset vector :inline :offset-assert 528) ; (flop1-offset vector :inline :offset-assert 544) -; (stuck-time useconds :offset-assert 560) -; (stuck-timeout useconds :offset-assert 568) +; (stuck-time seconds :offset-assert 560) +; (stuck-timeout seconds :offset-assert 568) ; (stuck-distance meters :offset-assert 576) ; (tongue-pull-speed-min float :offset-assert 580) ; (tongue-pull-speed-max float :offset-assert 584) @@ -18876,7 +18975,7 @@ ;; - Unknowns -;;(define-extern *sidekick-sg* object) ;; unknown type +(define-extern *sidekick-sg* skeleton-group) ;;(define-extern sidekick-clone object) ;; unknown type ;;(define-extern *sidekick-remap* object) ;; unknown type @@ -18941,7 +19040,7 @@ ;; - Unknowns ;;(define-extern cam-voicebox object) ;; unknown type -;;(define-extern *voicebox-sg* object) ;; unknown type +(define-extern *voicebox-sg* skeleton-group) ;;(define-extern empty-state object) ;; unknown type @@ -19115,7 +19214,7 @@ ;; - Unknowns ;;(define-extern *death-spool-array* object) ;; unknown type -;;(define-extern *deathcam-sg* object) ;; unknown type +(define-extern *deathcam-sg* skeleton-group) ;;(define-extern *smack-mods* object) ;; unknown type ;;(define-extern *smack-up-mods* object) ;; unknown type ;;(define-extern target-title object) ;; unknown type @@ -19150,7 +19249,6 @@ (new (symbol type) _type_ 0)) ) -(declare-type debug-menu basic) (deftype debug-menu-node (basic) ((name string :offset-assert 4) (parent debug-menu :offset-assert 8) @@ -19162,7 +19260,7 @@ :flag-assert #x900000014 ) -(declare-type debug-menu-item basic) +(declare-type debug-menu-item debug-menu-node) (deftype debug-menu (debug-menu-node) ((context debug-menu-context :offset-assert 20) (selected-item debug-menu-item :offset-assert 24) @@ -19234,17 +19332,15 @@ (fstart-inc float :offset-assert 76) (fstep float :offset-assert 80) (fprecision int32 :offset-assert 84) - ; (function int (the id) int (some constant) (fval or ival)x2 ) - (factivate-func function :offset-assert 88) - (ival int32 :offset 60) - (iundo-val int32 :offset 64) - (irange-min int32 :offset 68) - (irange-max int32 :offset 72) - (istart-inc int32 :offset 76) - (istep int32 :offset 80) - (ihex-p symbol :offset-assert 92) - ; (function int (the id) int (some constant) (fval or ival)x2 ) - (iactivate-func function :offset 88) + (factivate-func (function int int float float float) :offset-assert 88) + (ival int32 :offset 60) + (iundo-val int32 :offset 64) + (irange-min int32 :offset 68) + (irange-max int32 :offset 72) + (istart-inc int32 :offset 76) + (istep int32 :offset 80) + (ihex-p symbol :offset-assert 92) + (iactivate-func (function int int int int int) :offset 88) (ifloat-p symbol :offset-assert 96) ) :method-count-assert 9 @@ -19286,7 +19382,7 @@ (define-extern debug-menu-context-set-root-menu (function debug-menu-context debug-menu debug-menu-context)) (define-extern debug-menu-func-decode (function object function)) (define-extern debug-menu-item-var-make-int (function debug-menu-item-var (function int int int int int) int symbol int int symbol debug-menu-item-var)) -(define-extern debug-menu-item-var-make-float (function debug-menu-item-var (function int int float float int) float symbol float float symbol debug-menu-item-var)) +(define-extern debug-menu-item-var-make-float (function debug-menu-item-var (function int int float float float) float symbol float float int debug-menu-item-var)) (define-extern debug-menu-rebuild (function debug-menu debug-menu)) (define-extern debug-menu-context-default-selection (function debug-menu-context symbol debug-menu-context)) (define-extern debug-menu-item-get-max-width (function debug-menu-item debug-menu int)) @@ -19310,7 +19406,7 @@ (define-extern toggle-pause (function int)) (define-extern deactivate-progress (function none)) (define-extern debug-init-buffer (function bucket-id uint uint none)) -(define-extern real-main-draw-hook function) +(define-extern real-main-draw-hook (function none)) (define-extern error-sphere function) (define-extern draw-instance-info function) (define-extern find-instance-by-name (function string instance)) ;; TODO - ret not verified @@ -19319,7 +19415,7 @@ (define-extern find-instance-by-index function) (define-extern prototype-bucket-recalc-fields (function instance none)) ;; TODO - ret not confirmed (define-extern dma-add-process-drawable-hud function) -(define-extern foreground-engine-execute function) +(define-extern foreground-engine-execute (function engine display-frame int int none)) (define-extern main-debug-hook function) (define-extern main-draw-hook function) (define-extern swap-display (function display object)) @@ -19342,10 +19438,10 @@ (define-extern put-display-env (function object none)) ;; unknown type (define-extern *surrogate-dma-buffer* dma-buffer) ;; unknown type (define-extern *screen-shot* symbol) ;; unknown type -;;(define-extern *hud-lights* object) ;; unknown type -;;(define-extern *instance-mem-usage* object) ;; unknown type -;;(define-extern *add-sphere* object) ;; unknown type -;;(define-extern *generic-effect-mode* object) ;; unknown type +(define-extern *hud-lights* vu-lights) ;; unknown type +(define-extern *instance-mem-usage* memory-usage-block) ;; unknown type +(define-extern *add-sphere* symbol) ;; unknown type +(define-extern *generic-effect-mode* int) ;; unknown type ;; ---------------------- @@ -19392,9 +19488,9 @@ ;; - Functions -(define-extern drawable-sphere-box-intersect? function) -(define-extern instance-sphere-box-intersect? function) -(define-extern instance-tfragment-add-debug-sphere function) +(define-extern drawable-sphere-box-intersect? (function drawable bounding-box4w symbol)) ;; TODO - pcgtw | por | ppach +(define-extern instance-sphere-box-intersect? (function drawable instance-tie bounding-box4w symbol)) ;; pextlh | VITOF12 | pcgtw | por | ppach ;; TODO - the first arg is based from the second arg in `drawable:11` +(define-extern instance-tfragment-add-debug-sphere (function drawable instance-tie symbol)) ;; unused ;; ---------------------- @@ -19800,7 +19896,6 @@ :flag-assert #x1600d0013c ) -;; L729 (deftype eco-collectable (collectable) ((eco-effect basic :offset-assert 316) (collect-effect basic :offset-assert 320) @@ -19814,13 +19909,12 @@ (speed vector :inline :offset-assert 384) (movie-pos-index int32 :offset-assert 400) ) - (:methods - (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 () none 24) + (wait () none 22) ;; state + (pickup () none 23) ;; state + (die () none 24) ;; state (dummy-25 () none 25) - (dummy-26 () none 26) + (notice-blue () none 26) ;; state (dummy-27 () none 27) (dummy-28 () none 28) (dummy-29 () none 29) @@ -19833,7 +19927,6 @@ :flag-assert #x1f01300194 ) -;; L729 (deftype eco (eco-collectable) () :heap-base #x130 @@ -19890,7 +19983,6 @@ :flag-assert #x1f01300194 ) -;; L730 (deftype fuel-cell (eco-collectable) ((victory-anim basic :offset-assert 404) (state-object basic :offset-assert 408)) @@ -19900,7 +19992,6 @@ :flag-assert #x1f0130019c ) -;; L732 (deftype buzzer (eco-collectable) ((victory-anim basic :offset-assert 404)) @@ -19910,7 +20001,6 @@ :flag-assert #x1f01300198 ) -;; L728 (deftype ecovalve (process-drawable) ((offset vector :inline :offset-assert 176) (offset-target vector :inline :offset-assert 192) @@ -19921,7 +20011,6 @@ :flag-assert #x14007000d4 ) -;; L731 (deftype vent (process-drawable) ((show-particles basic :offset-assert 176) (collect-effect basic :offset-assert 180) @@ -20120,15 +20209,15 @@ (victory-anim basic :offset-assert 252) ) :method-count-assert 30 - :heap-base #x90 :size-assert #x100 + :heap-base #x90 :flag-assert #x1e00900100 ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) + (wait () none 20) ;; state (dummy-21 () none 21) (dummy-22 () none 22) - (dummy-23 () none 23) + (bounce-on () none 23) ;; state (dummy-24 () none 24) (dummy-25 () none 25) (dummy-26 () none 26) @@ -20179,12 +20268,12 @@ ;; - Unknowns -;;(define-extern *crate-iron-sg* object) ;; unknown type -;;(define-extern *crate-steel-sg* object) ;; unknown type -;;(define-extern *crate-darkeco-sg* object) ;; unknown type -;;(define-extern *crate-barrel-sg* object) ;; unknown type -;;(define-extern *crate-bucket-sg* object) ;; unknown type -;;(define-extern *crate-wood-sg* object) ;; unknown type +(define-extern *crate-iron-sg* skeleton-group) +(define-extern *crate-steel-sg* skeleton-group) +(define-extern *crate-darkeco-sg* skeleton-group) +(define-extern *crate-barrel-sg* skeleton-group) +(define-extern *crate-bucket-sg* skeleton-group) +(define-extern *crate-wood-sg* skeleton-group) ;;(define-extern *CRATE-bank* object) ;; unknown type @@ -20457,7 +20546,7 @@ ;; - Unknowns -;;(define-extern *fuelcell-naked-sg* object) ;; unknown type +(define-extern *fuelcell-naked-sg* skeleton-group) ;; ---------------------- @@ -20637,21 +20726,24 @@ (define-extern ocean-interp-wave function) (define-extern ocean-generate-verts function) (define-extern draw-ocean-texture function) -(define-extern ocean-init-buffer function) -(define-extern draw-ocean-far function) -(define-extern draw-ocean-mid function) -(define-extern ocean-end-buffer function) +(define-extern ocean-init-buffer (function dma-buffer none)) ; not confirmed +(define-extern draw-ocean-far (function dma-buffer none)) ; not confirmed +(define-extern draw-ocean-mid (function dma-buffer none)) ; not confirmed +(define-extern ocean-end-buffer (function dma-buffer none)) ; not confirmed (define-extern draw-ocean-near function) (define-extern init-ocean-far-regs function) (define-extern render-ocean-far function) (define-extern render-ocean-quad function) (define-extern draw-large-polygon-ocean function) -(define-extern draw-ocean function) -(define-extern update-ocean function) +(define-extern draw-ocean (function none)) +(define-extern update-ocean (function none)) + +;; - Symbols + +(define-extern *ocean-map* ocean-map) ;; - Unknowns -(define-extern *ocean-map* ocean-map) ;; unknown type ;;(define-extern *swamp-low-ocean-marker* object) ;; unknown type @@ -20686,7 +20778,7 @@ ;; - Unknowns -;;(define-extern ocean-texture-vu1-block object) ;; unknown type +(define-extern ocean-texture-vu1-block vu-function) ;;(define-extern *ocean-texture-work* object) ;; unknown type @@ -20699,7 +20791,7 @@ ;; - Functions (define-extern ocean-mid-add-constants function) -(define-extern ocean-mid-add-call function) +(define-extern ocean-mid-add-call (function dma-buffer int none)) (define-extern ocean-mid-add-upload function) (define-extern ocean-mid-add-call-flush (function dma-buffer uint none)) (define-extern draw-ocean-transition (function dma-buffer none)) @@ -20712,7 +20804,7 @@ (define-extern ocean-mid-mask-ptrs-bit? (function uint uint)) (define-extern ocean-mid-add-upload-table function) (define-extern ocean-mid-camera-masks-set! function) -(define-extern ocean-mid-add-matrices function) +(define-extern ocean-mid-add-matrices (function dma-buffer none)) ;; not verified (define-extern ocean-mid-check function) (define-extern ocean-matrix*! function) (define-extern ocean-mid-setup-constants function) @@ -20731,16 +20823,16 @@ ;; - Functions -(define-extern ocean-make-trans-camera-masks (function uint uint uint uint none)) -(define-extern ocean-trans-add-upload-strip (function dma-buffer uint uint uint uint none)) -(define-extern ocean-trans-add-constants (function dma-buffer none)) -(define-extern draw-ocean-transition-seams (function dma-buffer none)) -(define-extern ocean-trans-camera-masks-bit? function) -(define-extern ocean-trans-add-upload function) -(define-extern ocean-trans-mask-ptrs-bit? function) -(define-extern ocean-trans-add-upload-table function) -(define-extern ocean-transition-check function) -(define-extern ocean-trans-mask-ptrs-set! function) +(define-extern ocean-make-trans-camera-masks (function uint uint uint uint symbol)) +(define-extern ocean-trans-add-upload-strip (function dma-buffer uint uint uint uint uint none)) +(define-extern ocean-trans-add-constants (function dma-buffer pointer)) +(define-extern draw-ocean-transition-seams (function dma-buffer symbol)) +(define-extern ocean-trans-camera-masks-bit? (function uint uint symbol)) +(define-extern ocean-trans-add-upload (function dma-buffer int int none)) +(define-extern ocean-trans-mask-ptrs-bit? (function int int symbol)) +(define-extern ocean-trans-add-upload-table (function dma-buffer int int (pointer float) int symbol none)) +(define-extern ocean-transition-check (function ocean-trans-mask int int vector symbol)) +(define-extern ocean-trans-mask-ptrs-set! (function int int symbol)) ;; ---------------------- @@ -20775,7 +20867,7 @@ (define-extern compute-and-draw-shadow function) (define-extern draw-shadow function) (define-extern add-fake-shadow-to-buffer function) -(define-extern swap-fake-shadow-buffers function) +(define-extern swap-fake-shadow-buffers (function none)) ;; ---------------------- @@ -20788,7 +20880,7 @@ (define-extern convert-eye-data function) (define-extern render-eyes function) -(define-extern update-eyes function) +(define-extern update-eyes (function none)) ;; - Unknowns @@ -20826,6 +20918,7 @@ (tailpred glst-node :offset-assert 8) (numelem int32 :offset-assert 12) ) + :allow-misaligned :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -20875,114 +20968,206 @@ ;; - Types -; (deftype anim-test-sequence (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype list-control (structure) + ((listfunc (function int list-control symbol) :offset-assert 0) + (list-owner uint32 :offset-assert 4) + (top int32 :offset-assert 8) + (left int32 :offset-assert 12) + (list glst-list :offset-assert 16) + (the-node glst-node :offset-assert 20) + (top-index int32 :offset-assert 24) + (the-index int32 :offset-assert 28) + (the-disp-line int32 :offset-assert 32) + (highlight-index int32 :offset-assert 36) + (current-index int32 :offset-assert 40) + (numlines int32 :offset-assert 44) + (lines-to-disp int32 :offset-assert 48) + (charswide int32 :offset-assert 52) + (highlight-disp-line int32 :offset-assert 56) + (field-id int32 :offset-assert 60) + (xpos int32 :offset-assert 64) + (ypos int32 :offset-assert 68) + (user-info int32 :offset-assert 72) + (user-info-u uint32 :offset 72) ;; custom + (return-int int32 :offset-assert 76) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) -; (deftype anim-test-seq-item (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype list-field (structure) + ((left int32 :offset-assert 0) + (width int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) -; (deftype anim-tester (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(deftype DISP_LIST-bank (basic) + ((TV_SPACING int32 :offset-assert 4) + (BORDER_WIDTH int32 :offset-assert 8) + (BORDER_HEIGHT int32 :offset-assert 12) + (MAX_LINES int32 :offset-assert 16) + (CHAR_WIDTH int32 :offset-assert 20) + (INC_DELAY int32 :offset-assert 24) + (BORDER_LINES int32 :offset-assert 28) + (CXOFF int32 :offset-assert 32) + (CYOFF int32 :offset-assert 36) + (BXOFF int32 :offset-assert 40) + (BYOFF int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) -; (deftype list-control (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype anim-tester-bank (basic) + ((ANIM_SPEED float :offset-assert 4) + (BLEND float :offset-assert 8) + (OBJECT_LIST_X int32 :offset-assert 12) + (OBJECT_LIST_Y int32 :offset-assert 16) + (OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20) + (ANIM_LIST_X int32 :offset-assert 24) + (ANIM_LIST_Y int32 :offset-assert 28) + (ANIM_LIST_MIN_WIDTH int32 :offset-assert 32) + (PICK_LIST_X int32 :offset-assert 36) + (PICK_LIST_Y int32 :offset-assert 40) + (PICK_LIST_MIN_WIDTH int32 :offset-assert 44) + (EDIT_LIST_X int32 :offset-assert 48) + (EDIT_LIST_Y int32 :offset-assert 52) + (EDIT_STATS_X int32 :offset-assert 56) + (EDIT_LIST_MIN_WIDTH int32 :offset-assert 60) + (EDIT_PICK_X int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) -; (deftype list-field (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype anim-tester (process-drawable) + ((flags int32 :offset-assert 176) + (obj-list glst-list :inline :offset-assert 180) + (current-obj string :offset-assert 196) + (speed int32 :offset-assert 200) + (list-con list-control :inline :offset-assert 204) + (pick-con list-control :inline :offset-assert 284) + (item-field int64 :offset-assert 368) + (inc-delay int32 :offset-assert 376) + (inc-timer int32 :offset-assert 380) + (edit-mode int32 :offset-assert 384) + (old-mode int32 :offset-assert 388) + (anim-speed float :offset-assert 392) + (anim-gspeed float :offset-assert 396) + (anim-first float :offset-assert 400) + (anim-last float :offset-assert 404) + ) + :method-count-assert 20 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x1401300198 + ) -; (deftype DISP_LIST-bank (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype anim-test-obj (glst-named-node) + ((obj-art-group art-group :offset-assert 12) + (seq-list glst-list :inline :offset-assert 16) + (flags int32 :offset-assert 32) + (mesh-geo merc-ctrl :offset-assert 36) + (joint-geo art-joint-geo :offset-assert 40) + (list-con list-control :inline :offset-assert 44) + (parent uint32 :offset-assert 124) + (anim-index int32 :offset-assert 128) + (anim-hindex int32 :offset-assert 132) + (seq-index int32 :offset-assert 136) + (seq-hindex int32 :offset-assert 140) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + (:methods + (new (symbol type int string basic) _type_ 0) + ) + ) -; (deftype anim-tester-bank (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype anim-test-sequence (glst-named-node) + ((item-list glst-list :inline :offset-assert 12) + (playing-item int32 :offset-assert 28) + (flags int32 :offset-assert 32) + (list-con list-control :inline :offset-assert 36) + (parent anim-test-obj :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + (:methods + (new (symbol type int string) _type_ 0) + ) + ) -; (deftype anim-test-obj (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype anim-test-seq-item (glst-named-node) + ((speed int32 :offset-assert 12) + (blend int32 :offset-assert 16) + (first-frame float :offset-assert 20) + (last-frame float :offset-assert 24) + (num-frames float :offset-assert 28) + (artist-base float :offset-assert 32) + (flags int32 :offset-assert 36) + (parent anim-test-sequence :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + (:methods + (new (symbol type int string) _type_ 0) + ) + ) ;; - Functions -(define-extern anim-test-edit-sequence-list-handler function) -(define-extern anim-test-seq-mark-as-edited function) -(define-extern anim-tester-start function) -(define-extern anim-tester-add-newobj function) -(define-extern anim-tester-stop function) -(define-extern initialize-anim-tester function) -(define-extern anim-tester-save-object-seqs function) -(define-extern anim-tester-num-print (function symbol float none)) -(define-extern anim-test-obj-list-handler function) -(define-extern anim-tester-standard-event-handler function) -(define-extern anim-tester-reset function) -(define-extern anim-tester-get-playing-item function) -(define-extern anim-tester-update-anim-info function) -(define-extern anim-tester-interface function) -(define-extern display-list-control function) -(define-extern anim-test-anim-list-handler function) -(define-extern anim-test-sequence-list-handler function) -(define-extern anim-tester-disp-frame-num function) -(define-extern anim-test-seq-item-copy! function) -(define-extern anim-tester-adjust-frame function) -(define-extern anim-test-edit-seq-insert-item function) -(define-extern anim-tester-pick-item-setup function) -(define-extern anim-tester-save-all-objects function) -(define-extern anim-tester-real-post function) -(define-extern anim-test-obj-item-valid? function) -(define-extern anim-test-obj-init function) -(define-extern anim-test-sequence-init function) -(define-extern anim-test-obj-remove-invalid function) -(define-extern anim-tester-post function) -(define-extern anim-tester-string-get-frame!! function) -(define-extern anim-tester-load-object-seqs function) -(define-extern anim-tester-add-object function) -(define-extern anim-tester-set-name function) -(define-extern anim-tester-add-sequence function) +(define-extern anim-test-edit-sequence-list-handler (function int list-control symbol)) +(define-extern anim-test-seq-mark-as-edited (function anim-test-sequence none)) +(define-extern anim-tester-start (function none)) +(define-extern anim-tester-add-newobj (function anim-tester string art-group none)) +(define-extern anim-tester-stop (function none)) +(define-extern initialize-anim-tester (function none :behavior anim-tester)) +(define-extern anim-tester-save-object-seqs (function anim-test-obj none)) +(define-extern anim-tester-num-print (function basic float none)) +(define-extern anim-test-obj-list-handler (function int list-control symbol)) +(define-extern anim-tester-standard-event-handler (function process int symbol event-message-block object :behavior anim-tester)) +(define-extern anim-tester-reset (function none :behavior anim-tester)) +(define-extern anim-tester-get-playing-item (function anim-test-sequence anim-test-seq-item)) +(define-extern anim-tester-update-anim-info (function anim-test-seq-item none :behavior anim-tester)) +(define-extern anim-tester-interface (function none :behavior anim-tester)) +(define-extern display-list-control (function list-control none)) +(define-extern anim-test-anim-list-handler (function int list-control symbol)) +(define-extern anim-test-sequence-list-handler (function int list-control symbol)) +(define-extern anim-tester-disp-frame-num (function string float float font-context none)) +(define-extern anim-test-seq-item-copy! (function anim-test-seq-item anim-test-seq-item none)) +(define-extern anim-tester-adjust-frame (function float float none)) +(define-extern anim-test-edit-seq-insert-item (function anim-test-seq-item anim-test-sequence none)) +(define-extern anim-tester-pick-item-setup (function anim-test-seq-item anim-test-sequence none)) +(define-extern anim-tester-save-all-objects (function anim-tester none)) +(define-extern anim-tester-real-post (function none :behavior anim-tester)) +(define-extern anim-test-obj-item-valid? (function anim-test-obj anim-test-seq-item symbol)) +(define-extern anim-test-obj-init (function anim-test-obj list-control none)) +(define-extern anim-test-sequence-init (function anim-test-sequence anim-test-obj none)) +(define-extern anim-test-obj-remove-invalid (function anim-test-obj none)) +(define-extern anim-tester-post (function none :behavior anim-tester)) +(define-extern anim-tester-string-get-frame!! (function list-field string none)) +(define-extern anim-tester-load-object-seqs (function symbol)) +(define-extern anim-tester-add-object (function string none)) +(define-extern anim-tester-set-name (function string object)) +(define-extern anim-tester-add-sequence (function string none)) ;; - Unknowns -;;(define-extern *anim-tester* object) ;; unknown type -;;(define-extern *ANIM_TESTER-bank* object) ;; unknown type -;;(define-extern anim-tester-process object) ;; unknown type -;;(define-extern anim-test-field-highlight-lw object) ;; unknown type -;;(define-extern *DISP_LIST-bank* object) ;; unknown type +(define-extern *anim-tester* (pointer anim-tester)) ;; unknown type +(define-extern *ANIM_TESTER-bank* anim-tester-bank) ;; unknown type +(define-extern anim-tester-process (state none)) ;; unknown type +(define-extern anim-test-field-highlight-lw (inline-array list-field)) +(define-extern *DISP_LIST-bank* DISP_LIST-bank) ;; unknown type (define-extern *debug-menu-context* debug-menu-context) @@ -21029,7 +21214,7 @@ ;;(define-extern *viewer* object) ;; unknown type ;;(define-extern viewer-ja-name object) ;; unknown type ;;(define-extern viewer-geo-name object) ;; unknown type -;;(define-extern *viewer-sg* object) ;; unknown type +(define-extern *viewer-sg* skeleton-group) ;;(define-extern viewer-process object) ;; unknown type ;;(define-extern viewer-string object) ;; unknown type @@ -21523,38 +21708,19 @@ ;; - Types -; (deftype water-anim (water-vol) -; ((look int32 :offset-assert 212) -; (play-ambient-sound? basic :offset-assert 216) -; ) -; :method-count-assert 30 -; :size-assert #xdc -; :flag-assert #x1e007000dc -; ;; inherited inspect of water-vol -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype water-anim (water-vol) + ((look int32 :offset-assert 212) + (play-ambient-sound? symbol :offset-assert 216) + ) + :method-count-assert 30 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x1e007000dc + (:methods + (water-vol-idle () none 20) ;; state + (water-vol-startup () none 21) ;; state + ) + ) ; (deftype water-anim-look (structure) ; ((skel-group basic :offset-assert 0) @@ -21569,54 +21735,54 @@ ;; - Unknowns ;;(define-extern *water-anim-look* object) ;; unknown type -;;(define-extern *water-anim-sunken-dark-eco-qbert-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-dark-eco-platform-room-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-dark-eco-helix-room-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-big-room-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-first-room-from-entrance-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-qbert-room-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-first-right-branch-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-circular-with-bullys-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-hall-with-one-whirlpool-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-hall-with-three-whirlpools-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-start-of-helix-slide-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-room-above-exit-chamber-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-hall-before-big-room-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-short-piece-sg* object) ;; unknown type -;;(define-extern *water-anim-sunken-big-room-upper-water-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-center-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-lower-right-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-mid-right-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-lower-left-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-mid-left-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-maincave-water-with-crystal-sg* object) ;; unknown type -;;(define-extern *water-anim-robocave-main-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-by-arena-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-above-skeleton-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-behind-skeleton-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-above-skull-back-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-above-skull-front-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-other-near-skull-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-near-skull-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-under-spine-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-by-dock-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-island-near-dock-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-mud-lonely-island-sg* object) ;; unknown type -;;(define-extern *water-anim-misty-dark-eco-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-ogre-lava-sg* object) ;; unknown type -;;(define-extern *water-anim-jungle-river-sg* object) ;; unknown type -;;(define-extern *water-anim-village3-lava-sg* object) ;; unknown type -;;(define-extern *water-anim-training-lake-sg* object) ;; unknown type -;;(define-extern *water-anim-darkcave-water-with-crystal-sg* object) ;; unknown type -;;(define-extern *water-anim-rolling-water-back-sg* object) ;; unknown type -;;(define-extern *water-anim-rolling-water-front-sg* object) ;; unknown type -;;(define-extern *water-anim-finalboss-dark-eco-pool-sg* object) ;; unknown type -;;(define-extern *water-anim-lavatube-energy-lava-sg* object) ;; unknown type -;;(define-extern *water-anim-village1-rice-paddy-sg* object) ;; unknown type -;;(define-extern *water-anim-village1-fountain-sg* object) ;; unknown type -;;(define-extern *water-anim-village1-rice-paddy-mid-sg* object) ;; unknown type -;;(define-extern *water-anim-village1-rice-paddy-top-sg* object) ;; unknown type -;;(define-extern *water-anim-village2-bucket-sg* object) ;; unknown type +(define-extern *water-anim-sunken-dark-eco-qbert-sg* skeleton-group) +(define-extern *water-anim-sunken-dark-eco-platform-room-sg* skeleton-group) +(define-extern *water-anim-sunken-dark-eco-helix-room-sg* skeleton-group) +(define-extern *water-anim-sunken-big-room-sg* skeleton-group) +(define-extern *water-anim-sunken-first-room-from-entrance-sg* skeleton-group) +(define-extern *water-anim-sunken-qbert-room-sg* skeleton-group) +(define-extern *water-anim-sunken-first-right-branch-sg* skeleton-group) +(define-extern *water-anim-sunken-circular-with-bullys-sg* skeleton-group) +(define-extern *water-anim-sunken-hall-with-one-whirlpool-sg* skeleton-group) +(define-extern *water-anim-sunken-hall-with-three-whirlpools-sg* skeleton-group) +(define-extern *water-anim-sunken-start-of-helix-slide-sg* skeleton-group) +(define-extern *water-anim-sunken-room-above-exit-chamber-sg* skeleton-group) +(define-extern *water-anim-sunken-hall-before-big-room-sg* skeleton-group) +(define-extern *water-anim-sunken-short-piece-sg* skeleton-group) +(define-extern *water-anim-sunken-big-room-upper-water-sg* skeleton-group) +(define-extern *water-anim-maincave-center-pool-sg* skeleton-group) +(define-extern *water-anim-maincave-lower-right-pool-sg* skeleton-group) +(define-extern *water-anim-maincave-mid-right-pool-sg* skeleton-group) +(define-extern *water-anim-maincave-lower-left-pool-sg* skeleton-group) +(define-extern *water-anim-maincave-mid-left-pool-sg* skeleton-group) +(define-extern *water-anim-maincave-water-with-crystal-sg* skeleton-group) +(define-extern *water-anim-robocave-main-pool-sg* skeleton-group) +(define-extern *water-anim-misty-mud-by-arena-sg* skeleton-group) +(define-extern *water-anim-misty-mud-above-skeleton-sg* skeleton-group) +(define-extern *water-anim-misty-mud-behind-skeleton-sg* skeleton-group) +(define-extern *water-anim-misty-mud-above-skull-back-sg* skeleton-group) +(define-extern *water-anim-misty-mud-above-skull-front-sg* skeleton-group) +(define-extern *water-anim-misty-mud-other-near-skull-sg* skeleton-group) +(define-extern *water-anim-misty-mud-near-skull-sg* skeleton-group) +(define-extern *water-anim-misty-mud-under-spine-sg* skeleton-group) +(define-extern *water-anim-misty-mud-by-dock-sg* skeleton-group) +(define-extern *water-anim-misty-mud-island-near-dock-sg* skeleton-group) +(define-extern *water-anim-misty-mud-lonely-island-sg* skeleton-group) +(define-extern *water-anim-misty-dark-eco-pool-sg* skeleton-group) +(define-extern *water-anim-ogre-lava-sg* skeleton-group) +(define-extern *water-anim-jungle-river-sg* skeleton-group) +(define-extern *water-anim-village3-lava-sg* skeleton-group) +(define-extern *water-anim-training-lake-sg* skeleton-group) +(define-extern *water-anim-darkcave-water-with-crystal-sg* skeleton-group) +(define-extern *water-anim-rolling-water-back-sg* skeleton-group) +(define-extern *water-anim-rolling-water-front-sg* skeleton-group) +(define-extern *water-anim-finalboss-dark-eco-pool-sg* skeleton-group) +(define-extern *water-anim-lavatube-energy-lava-sg* skeleton-group) +(define-extern *water-anim-village1-rice-paddy-sg* skeleton-group) +(define-extern *water-anim-village1-fountain-sg* skeleton-group) +(define-extern *water-anim-village1-rice-paddy-mid-sg* skeleton-group) +(define-extern *water-anim-village1-rice-paddy-top-sg* skeleton-group) +(define-extern *water-anim-village2-bucket-sg* skeleton-group) ;; ---------------------- @@ -21627,36 +21793,26 @@ ;; - Types -; (deftype dark-eco-pool (water-anim) -; () -; :method-count-assert 30 -; :size-assert #xdc -; :flag-assert #x1e007000dc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype dark-eco-pool (water-anim) + () + :method-count-assert 30 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x1e007000dc + ;; not enough basic ops + (:methods + (water-vol-idle () none 20) ;; state + (water-vol-startup () none 21) ;; state + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + ) + ) ;; - Unknowns @@ -21675,37 +21831,37 @@ ;; - Types -; (deftype rigid-body-platform-constants (structure) -; ((drag-factor float :offset-assert 0) -; (buoyancy-factor float :offset-assert 4) -; (max-buoyancy-depth meters :offset-assert 8) -; (gravity-factor float :offset-assert 12) -; (gravity meters :offset-assert 16) -; (player-weight meters :offset-assert 20) -; (player-bonk-factor float :offset-assert 24) -; (player-dive-factor float :offset-assert 28) -; (player-force-distance meters :offset-assert 32) -; (player-force-clamp meters :offset-assert 36) -; (player-force-timeout uint64 :offset-assert 40) -; (explosion-force meters :offset-assert 48) -; (linear-damping float :offset-assert 52) -; (angular-damping float :offset-assert 56) -; (control-point-count int32 :offset-assert 60) -; (mass float :offset-assert 64) -; (inertial-tensor-x meters :offset-assert 68) -; (inertial-tensor-y meters :offset-assert 72) -; (inertial-tensor-z meters :offset-assert 76) -; (cm-joint-x meters :offset-assert 80) -; (cm-joint-y meters :offset-assert 84) -; (cm-joint-z meters :offset-assert 88) -; (idle-distance meters :offset-assert 92) -; (platform basic :offset-assert 96) -; (sound-name basic :offset-assert 100) -; ) -; :method-count-assert 9 -; :size-assert #x68 -; :flag-assert #x900000068 -; ) +(deftype rigid-body-platform-constants (structure) + ((drag-factor float :offset-assert 0) + (buoyancy-factor float :offset-assert 4) + (max-buoyancy-depth meters :offset-assert 8) + (gravity-factor float :offset-assert 12) + (gravity meters :offset-assert 16) + (player-weight meters :offset-assert 20) + (player-bonk-factor float :offset-assert 24) + (player-dive-factor float :offset-assert 28) + (player-force-distance meters :offset-assert 32) + (player-force-clamp meters :offset-assert 36) + (player-force-timeout uint64 :offset-assert 40) + (explosion-force meters :offset-assert 48) + (linear-damping float :offset-assert 52) + (angular-damping float :offset-assert 56) + (control-point-count int32 :offset-assert 60) + (mass float :offset-assert 64) + (inertial-tensor-x meters :offset-assert 68) + (inertial-tensor-y meters :offset-assert 72) + (inertial-tensor-z meters :offset-assert 76) + (cm-joint-x meters :offset-assert 80) + (cm-joint-y meters :offset-assert 84) + (cm-joint-z meters :offset-assert 88) + (idle-distance meters :offset-assert 92) + (platform basic :offset-assert 96) + (sound-name basic :offset-assert 100) + ) + :method-count-assert 9 + :size-assert #x68 + :flag-assert #x900000068 + ) ; (deftype rigid-body-control-point-inline-array (inline-array-class) ; ((length int32 :offset-assert 4) @@ -21717,55 +21873,45 @@ ; :flag-assert #x900000010 ; ) -; (deftype rigid-body-platform (process-drawable) -; ((info rigid-body-platform-constants :offset-assert 176) -; (rbody rigid-body :inline :offset-assert 192) -; (control-point-array basic :offset-assert 616) -; (player-velocity vector :inline :offset-assert 624) -; (player-velocity-prev vector :inline :offset-assert 640) -; (player-force-position vector :inline :offset-assert 656) -; (player-force vector :inline :offset-assert 672) -; (sim-time-remaining float :offset-assert 688) -; (float-height-offset float :offset-assert 692) -; (player-attack-id int32 :offset-assert 696) -; (player-bonk-timeout uint64 :offset-assert 704) -; (water-anim basic :offset-assert 712) -; (player-contact basic :offset-assert 716) -; (player-impulse basic :offset-assert 720) -; ) -; :method-count-assert 35 -; :size-assert #x2d4 -; :flag-assert #x23027002d4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; ) -; ) +(deftype rigid-body-platform (process-drawable) + ((info rigid-body-platform-constants :offset-assert 176) + (rbody rigid-body :inline :offset-assert 192) + (control-point-array basic :offset-assert 616) + (player-velocity vector :inline :offset-assert 624) + (player-velocity-prev vector :inline :offset-assert 640) + (player-force-position vector :inline :offset-assert 656) + (player-force vector :inline :offset-assert 672) + (sim-time-remaining float :offset-assert 688) + (float-height-offset float :offset-assert 692) + (player-attack-id int32 :offset-assert 696) + (player-bonk-timeout uint64 :offset-assert 704) + (water-anim basic :offset-assert 712) + (player-contact basic :offset-assert 716) + (player-impulse basic :offset-assert 720) + ) + :method-count-assert 35 + :size-assert #x2d4 + :heap-base #x270 + :flag-assert #x23027002d4 + ;; inherited inspect of process-drawable + (:methods + (rigid-body-platform-idle () none 20) ;; state + (rigid-body-platform-float () none 21) ;; state + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + (dummy-31 () none 31) + (dummy-32 () none 32) + (dummy-33 () none 33) + (dummy-34 () none 34) + ) + ) ;; - Functions @@ -21799,33 +21945,33 @@ (die-anim int32 :offset-assert 40) (neck-joint int32 :offset-assert 44) (player-look-at-joint int32 :offset-assert 48) - (run-travel-speed float :offset-assert 52) ; meters - (run-rotate-speed float :offset-assert 56) ; deg - (run-acceleration float :offset-assert 60) ; meters - (run-turn-time uint64 :offset-assert 64) ; seconds - (walk-travel-speed float :offset-assert 72) ; meters - (walk-rotate-speed float :offset-assert 76) ; deg - (walk-acceleration float :offset-assert 80) ; meters - (walk-turn-time uint64 :offset-assert 88) ; seconds - (attack-shove-back float :offset-assert 96) ; meters - (attack-shove-up float :offset-assert 100) ; meters - (shadow-size float :offset-assert 104) ; meters - (notice-nav-radius float :offset-assert 108) ; meters - (nav-nearest-y-threshold float :offset-assert 112) ; meters - (notice-distance float :offset-assert 116) ; meters - (proximity-notice-distance float :offset-assert 120) ; meters - (stop-chase-distance float :offset-assert 124) ; meters - (frustration-distance float :offset-assert 128) ; meters + (run-travel-speed meters :offset-assert 52) + (run-rotate-speed degrees :offset-assert 56) + (run-acceleration meters :offset-assert 60) + (run-turn-time seconds :offset-assert 64) + (walk-travel-speed meters :offset-assert 72) + (walk-rotate-speed degrees :offset-assert 76) + (walk-acceleration meters :offset-assert 80) + (walk-turn-time seconds :offset-assert 88) + (attack-shove-back meters :offset-assert 96) + (attack-shove-up meters :offset-assert 100) + (shadow-size meters :offset-assert 104) + (notice-nav-radius meters :offset-assert 108) + (nav-nearest-y-threshold meters :offset-assert 112) + (notice-distance meters :offset-assert 116) + (proximity-notice-distance meters :offset-assert 120) + (stop-chase-distance meters :offset-assert 124) + (frustration-distance meters :offset-assert 128) (frustration-time uint64 :offset-assert 136) (die-anim-hold-frame float :offset-assert 144) (jump-anim-start-frame float :offset-assert 148) (jump-land-anim-end-frame float :offset-assert 152) - (jump-height-min float :offset-assert 156) ; meters + (jump-height-min meters :offset-assert 156) (jump-height-factor float :offset-assert 160) (jump-start-anim-speed float :offset-assert 164) - (shadow-max-y float :offset-assert 168) ; meters - (shadow-min-y float :offset-assert 172) ; meters - (shadow-locus-dist float :offset-assert 176) ; meters + (shadow-max-y meters :offset-assert 168) + (shadow-min-y meters :offset-assert 172) + (shadow-locus-dist meters :offset-assert 176) (use-align basic :offset-assert 180) (draw-shadow basic :offset-assert 184) (move-to-ground basic :offset-assert 188) @@ -21853,7 +21999,7 @@ (jump-dest vector :inline :offset-assert 224) (jump-trajectory trajectory :inline :offset-assert 240) (jump-time uint64 :offset-assert 280) - (nav-info nav-enemy-info :offset-assert 288) + (nav-info nav-enemy-info :offset-assert 288) (target-speed float :offset-assert 292) (momentum-speed float :offset-assert 296) (acceleration float :offset-assert 300) @@ -21878,20 +22024,20 @@ :flag-assert #x4c01200190 ;; inherited inspect of process-drawable (:methods - (dummy-20 (_type_) none 20) - (dummy-21 (_type_) none 21) - (dummy-22 (_type_) none 22) - (dummy-23 (_type_) none 23) - (dummy-24 (_type_) none 24) - (dummy-25 (_type_) none 25) - (dummy-26 (_type_) none 26) - (dummy-27 (_type_) none 27) - (dummy-28 (_type_) none 28) - (dummy-29 (_type_) none 29) - (dummy-30 (_type_) none 30) - (dummy-31 (_type_) none 31) - (dummy-32 (_type_) none 32) - (dummy-33 (_type_) none 33) + (nav-enemy-attack () none 20) ;; state + (nav-enemy-chase () none 21) ;; state + (dummy-22 () none 22) + (nav-enemy-die () none 23) ;; state + (nav-enemy-fuel-cell () none 24) ;; state + (nav-enemy-give-up () none 25) ;; state + (nav-enemy-jump () none 26) ;; state + (nav-enemy-jump-land () none 27) ;; state + (nav-enemy-idle () none 28) ;; state + (nav-enemy-notice () none 29) ;; state + (nav-enemy-patrol () none 30) ;; state + (nav-enemy-stare () none 31) ;; state + (nav-enemy-stop-chase () none 32) ;; state + (nav-enemy-victory () none 33) ;; state (dummy-34 (_type_) none 34) (dummy-35 (_type_) none 35) (dummy-36 (_type_) none 36) @@ -22007,75 +22153,55 @@ ;; - Types -; (deftype baseplat (process-drawable) -; ((smush smush-control :inline :offset-assert 176) -; (basetrans vector :inline :offset-assert 208) -; (bouncing basic :offset-assert 224) -; ) -; :method-count-assert 27 -; :size-assert #xe4 -; :flag-assert #x1b008000e4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; ) -; ) +(deftype baseplat (process-drawable) + ((smush smush-control :inline :offset-assert 176) + (basetrans vector :inline :offset-assert 208) + (bouncing basic :offset-assert 224) + ) + :method-count-assert 27 + :size-assert #xe4 + :heap-base #x80 + :flag-assert #x1b008000e4 + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + ) + ) -; (deftype eco-door (process-drawable) -; ((speed float :offset-assert 176) -; (open-distance float :offset-assert 180) -; (close-distance float :offset-assert 184) -; (out-dir vector :inline :offset-assert 192) -; (open-sound uint128 :offset-assert 208) -; (close-sound uint128 :offset-assert 224) -; (state-actor basic :offset-assert 240) -; (flags int32 :offset-assert 244) -; (locked basic :offset-assert 248) -; (auto-close basic :offset-assert 252) -; (one-way basic :offset-assert 256) -; ) -; :method-count-assert 27 -; :size-assert #x104 -; :flag-assert #x1b00a00104 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; ) -; ) +(deftype eco-door (process-drawable) + ((speed float :offset-assert 176) + (open-distance float :offset-assert 180) + (close-distance float :offset-assert 184) + (out-dir vector :inline :offset-assert 192) + (open-sound uint128 :offset-assert 208) + (close-sound uint128 :offset-assert 224) + (state-actor basic :offset-assert 240) + (flags int32 :offset-assert 244) + (locked basic :offset-assert 248) + (auto-close basic :offset-assert 252) + (one-way basic :offset-assert 256) + ) + :method-count-assert 27 + :size-assert #x104 + :heap-base #xa0 + :flag-assert #x1b00a00104 + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + ) + ) ;; - Functions @@ -22094,80 +22220,60 @@ ;; - Types -; (deftype basebutton (process-drawable) -; ((down? basic :offset-assert 176) -; (spawned-by-other? basic :offset-assert 180) -; (move-to? basic :offset-assert 184) -; (notify-actor basic :offset-assert 188) -; (timeout float :offset-assert 192) -; (button-id int32 :offset-assert 196) -; (event-going-down basic :offset-assert 200) -; (event-down basic :offset-assert 204) -; (event-going-up basic :offset-assert 208) -; (event-up basic :offset-assert 212) -; (anim-speed float :offset-assert 216) -; (move-to-pos vector :inline :offset-assert 224) -; (move-to-quat quaternion :inline :offset-assert 240) -; ) -; :method-count-assert 32 -; :size-assert #x100 -; :flag-assert #x2000900100 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; ) -; ) +(deftype basebutton (process-drawable) + ((down? symbol :offset-assert 176) + (spawned-by-other? symbol :offset-assert 180) + (move-to? symbol :offset-assert 184) + (notify-actor basic :offset-assert 188) + (timeout float :offset-assert 192) + (button-id int32 :offset-assert 196) + (event-going-down basic :offset-assert 200) + (event-down basic :offset-assert 204) + (event-going-up basic :offset-assert 208) + (event-up basic :offset-assert 212) + (anim-speed float :offset-assert 216) + (move-to-pos vector :inline :offset-assert 224) + (move-to-quat quaternion :inline :offset-assert 240) + ) + :method-count-assert 32 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x2000900100 + ;; inherited inspect of process-drawable + (:methods + (basebutton-down-idle () none 20) ;; state + (basebutton-going-down () none 21) ;; state + (dummy-22 () none 22) + (dummy-23 () none 23) + (basebutton-up-idle () none 24) ;; state + (dummy-25 () none 25) + (dummy-26 () none 26) + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + (dummy-31 () none 31) + ) + ) -; (deftype warp-gate (process-drawable) -; ((level basic :offset-assert 176) -; (level-slot int32 :offset-assert 180) -; (min-slot int32 :offset-assert 184) -; (max-slot int32 :offset-assert 188) -; ) -; :method-count-assert 24 -; :size-assert #xc0 -; :flag-assert #x18005000c0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; ) -; ) +(deftype warp-gate (process-drawable) + ((level basic :offset-assert 176) + (level-slot int32 :offset-assert 180) + (min-slot int32 :offset-assert 184) + (max-slot int32 :offset-assert 188) + ) + :method-count-assert 24 + :size-assert #xc0 + :heap-base #x50 + :flag-assert #x18005000c0 + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + ) + ) ;; - Functions @@ -22178,7 +22284,7 @@ ;;(define-extern *warp-jump-mods* object) ;; unknown type ;;(define-extern target-warp-out object) ;; unknown type ;;(define-extern *warp-info* object) ;; unknown type -;;(define-extern *generic-button-sg* object) ;; unknown type +(define-extern *generic-button-sg* skeleton-group) ;; ---------------------- @@ -22189,22 +22295,22 @@ ;; - Types -; (deftype tippy (structure) -; ((axis vector :inline :offset-assert 0) -; (angle float :offset-assert 16) -; (orig quaternion :inline :offset-assert 32) -; (dist-ratio float :offset-assert 48) -; (damping float :offset-assert 52) -; (1-damping float :offset-assert 56) -; ) -; :method-count-assert 11 -; :size-assert #x3c -; :flag-assert #xb0000003c -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(deftype tippy (structure) + ((axis vector :inline :offset-assert 0) + (angle float :offset-assert 16) + (orig quaternion :inline :offset-assert 32) + (dist-ratio float :offset-assert 48) + (damping float :offset-assert 52) + (1-damping float :offset-assert 56) + ) + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) ;; ---------------------- @@ -22341,87 +22447,25 @@ ;; - Types -; (deftype babak (nav-enemy) -; () -; :method-count-assert 76 -; :size-assert #x190 -; :flag-assert #x4c01200190 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype babak (nav-enemy) + () + :method-count-assert 76 + :size-assert #x190 + :heap-base #x120 + :flag-assert #x4c01200190 + ;; not enough basic ops + (:methods + (nav-enemy-die () none 23) ;; state + (nav-enemy-fuel-cell () none 24) ;; state + (nav-enemy-idle () none 28) ;; state + (nav-enemy-patrol () none 30) ;; state + ) + ) ;; - Unknowns -;;(define-extern *babak-sg* object) ;; unknown type -;;(define-extern *babak-nav-enemy-info* object) ;; unknown type +(define-extern *babak-sg* skeleton-group) +(define-extern *babak-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -22437,22 +22481,23 @@ (spawn-point vector :inline :offset-assert 416) (scale float :offset-assert 432) (anim-speed float :offset-assert 436) - (y-max float :offset-assert 440) ; meters - (y-min float :offset-assert 444) ; meters + (y-max meters :offset-assert 440) + (y-min meters :offset-assert 444) (attack-time float :offset-assert 448) (player-water-time uint64 :offset-assert 456) - (player-in-water symbol :offset-assert 464) + (player-in-water basic :offset-assert 464) (last-y float :offset-assert 468) - (spawn-distance float :offset-assert 472) ; meters - (chase-speed float :offset-assert 476) ; meters - (y-speed float :offset-assert 480) ; meters + (spawn-distance meters :offset-assert 472) + (chase-speed meters :offset-assert 476) + (y-speed meters :offset-assert 480) (sound-id sound-id :offset-assert 484) - (enable-patrol symbol :offset-assert 488) + (enable-patrol basic :offset-assert 488) ) :method-count-assert 76 - :heap-base #x180 :size-assert #x1ec + :heap-base #x180 :flag-assert #x4c018001ec + ;; inherited inspect of nav-enemy ) ;; - Functions @@ -22465,8 +22510,8 @@ ;; - Unknowns -;;(define-extern *sharkey-sg* object) ;; unknown type -;;(define-extern *sharkey-nav-enemy-info* object) ;; unknown type +(define-extern *sharkey-sg* skeleton-group) +(define-extern *sharkey-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -22518,7 +22563,7 @@ ;; - Unknowns -;;(define-extern *orb-cache-top-sg* object) ;; unknown type +(define-extern *orb-cache-top-sg* skeleton-group) ;;(define-extern orb-cache-top-complete object) ;; unknown type ;;(define-extern orb-cache-top-activate object) ;; unknown type ;;(define-extern orb-cache-top-idle object) ;; unknown type @@ -22532,48 +22577,31 @@ ;; - Types -; (deftype plat (baseplat) -; ((path-pos float :offset-assert 228) -; (sync sync-info-eased :inline :offset-assert 232) -; (sound-id sound-id :offset-assert 260) -; ) -; :method-count-assert 33 -; :size-assert #x108 -; :flag-assert #x2100a00108 -; ;; inherited inspect of baseplat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype plat (baseplat) + ((path-pos float :offset-assert 228) + (sync sync-info-eased :inline :offset-assert 232) + (sound-id sound-id :offset-assert 260) + ) + :method-count-assert 33 + :size-assert #x108 + :heap-base #xa0 + :flag-assert #x2100a00108 + ;; inherited inspect of baseplat + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (plat-startup () none 30) ;; state + (plat-idle () none 31) ;; state + (plat-path-active () none 32) ;; state + ) + ) ;; - Unknowns -;;(define-extern *plat-jungleb-sg* object) ;; unknown type -;;(define-extern *plat-sunken-sg* object) ;; unknown type -;;(define-extern *plat-sg* object) ;; unknown type +(define-extern *plat-jungleb-sg* skeleton-group) +(define-extern *plat-sunken-sg* skeleton-group) +(define-extern *plat-sg* skeleton-group) ;; ---------------------- @@ -22584,48 +22612,38 @@ ;; - Types -; (deftype plat-button (process-drawable) -; ((go-back-if-lost-player? basic :offset-assert 176) -; (grab-player? basic :offset-assert 180) -; (should-grab-player? basic :offset-assert 184) -; (path-pos float :offset-assert 188) -; (bidirectional? basic :offset-assert 192) -; (allow-auto-kill basic :offset-assert 196) -; (sound-id sound-id :offset-assert 200) -; (trans-off vector :inline :offset-assert 208) -; (spawn-pos vector :inline :offset-assert 224) -; ) -; :method-count-assert 33 -; :size-assert #xf0 -; :flag-assert #x21008000f0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype plat-button (process-drawable) + ((go-back-if-lost-player? symbol :offset-assert 176) + (grab-player? symbol :offset-assert 180) + (should-grab-player? symbol :offset-assert 184) + (path-pos float :offset-assert 188) + (bidirectional? symbol :offset-assert 192) + (allow-auto-kill basic :offset-assert 196) + (sound-id sound-id :offset-assert 200) + (trans-off vector :inline :offset-assert 208) + (spawn-pos vector :inline :offset-assert 224) + ) + :method-count-assert 33 + :size-assert #xf0 + :heap-base #x80 + :flag-assert #x21008000f0 + ;; inherited inspect of process-drawable + (:methods + (plat-button-at-end () none 20) ;; state + (dummy-21 () none 21) + (plat-button-pressed () none 22) ;; state + (plat-button-move-downward () none 23) ;; state + (plat-button-move-upward () none 24) ;; state + (dummy-25 () none 25) + (dummy-26 () none 26) + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + (dummy-31 () none 31) + (dummy-32 () none 32) + ) + ) ;; - Functions @@ -22634,7 +22652,7 @@ ;; - Unknowns -;;(define-extern *plat-button-sg* object) ;; unknown type +(define-extern *plat-button-sg* skeleton-group) ;; ---------------------- @@ -22645,51 +22663,29 @@ ;; - Types -; (deftype plat-eco (plat) -; ((notice-dist float :offset-assert 264) -; (sync-offset-dest float :offset-assert 268) -; (sync-offset-faux float :offset-assert 272) -; (sync-linear-val float :offset-assert 276) -; (target uint64 :offset-assert 280) -; (unlit-look lod-set :inline :offset-assert 288) -; (lit-look lod-set :inline :offset-assert 324) -; ) -; :method-count-assert 33 -; :size-assert #x165 -; :flag-assert #x2101000165 -; ;; inherited inspect of plat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype plat-eco (plat) + ((notice-dist float :offset-assert 264) + (sync-offset-dest float :offset-assert 268) + (sync-offset-faux float :offset-assert 272) + (sync-linear-val float :offset-assert 276) + (target uint64 :offset-assert 280) + (unlit-look lod-set :inline :offset-assert 288) + (lit-look lod-set :inline :offset-assert 324) + ) + :method-count-assert 33 + :size-assert #x165 + :heap-base #x100 + :flag-assert #x2101000165 + ;; inherited inspect of plat + (:methods + (plat-path-active () none 32) + ) + ) ;; - Unknowns -;;(define-extern *plat-eco-lit-sg* object) ;; unknown type -;;(define-extern *plat-eco-unlit-sg* object) ;; unknown type +(define-extern *plat-eco-lit-sg* skeleton-group) +(define-extern *plat-eco-unlit-sg* skeleton-group) ;; ---------------------- @@ -22791,12 +22787,12 @@ ;;(define-extern *ropebridge-52-rest-state* object) ;; unknown type ;;(define-extern *ropebridge-32-rest-state* object) ;; unknown type ;;(define-extern *ropebridge-36-rest-state* object) ;; unknown type -;;(define-extern *ropebridge-32-sg* object) ;; unknown type -;;(define-extern *snow-bridge-36-sg* object) ;; unknown type -;;(define-extern *ropebridge-52-sg* object) ;; unknown type -;;(define-extern *ropebridge-70-sg* object) ;; unknown type -;;(define-extern *ropebridge-36-sg* object) ;; unknown type -;;(define-extern *vil3-bridge-36-sg* object) ;; unknown type +(define-extern *ropebridge-32-sg* skeleton-group) +(define-extern *snow-bridge-36-sg* skeleton-group) +(define-extern *ropebridge-52-sg* skeleton-group) +(define-extern *ropebridge-70-sg* skeleton-group) +(define-extern *ropebridge-36-sg* skeleton-group) +(define-extern *vil3-bridge-36-sg* skeleton-group) ;; ---------------------- @@ -22971,14 +22967,14 @@ ;; - Unknowns -;;(define-extern *mistycannon-sg* object) ;; unknown type +(define-extern *mistycannon-sg* skeleton-group) ;;(define-extern mistycannon-idle object) ;; unknown type ;;(define-extern mistycannon-waiting-for-player object) ;; unknown type ;;(define-extern cam-mistycannon object) ;; unknown type ;;(define-extern mistycannon-waiting-for-player-to-fuck-off object) ;; unknown type ;;(define-extern mistycannon-aim-at-player object) ;; unknown type ;;(define-extern mistycannon-player-control object) ;; unknown type -;;(define-extern *mistycannon-missile-sg* object) ;; unknown type +(define-extern *mistycannon-missile-sg* skeleton-group) ;;(define-extern mistycannon-missile-idle object) ;; unknown type ;;(define-extern mistycannon-missile-explode object) ;; unknown type ;;(define-extern mistycannon-missile-in-water object) ;; unknown type @@ -23427,30 +23423,30 @@ ;; - Unknowns -;;(define-extern *beachcam-sg* object) ;; unknown type -;;(define-extern *harvester-sg* object) ;; unknown type +(define-extern *beachcam-sg* skeleton-group) +(define-extern *harvester-sg* skeleton-group) ;;(define-extern harvester-idle object) ;; unknown type ;;(define-extern harvester-inflate object) ;; unknown type -;;(define-extern *flutflutegg-sg* object) ;; unknown type +(define-extern *flutflutegg-sg* skeleton-group) ;;(define-extern flutflutegg-break object) ;; unknown type ;;(define-extern flutflutegg-idle object) ;; unknown type ;;(define-extern flutflutegg-physics-fall object) ;; unknown type ;;(define-extern flutflutegg-physics object) ;; unknown type -;;(define-extern *bladeassm-sg* object) ;; unknown type +(define-extern *bladeassm-sg* skeleton-group) ;;(define-extern bladeassm-idle object) ;; unknown type -;;(define-extern *kickrock-sg* object) ;; unknown type +(define-extern *kickrock-sg* skeleton-group) ;;(define-extern flying-rock-rolling object) ;; unknown type ;;(define-extern flying-rock-idle object) ;; unknown type -;;(define-extern *ecoventrock-sg* object) ;; unknown type +(define-extern *ecoventrock-sg* skeleton-group) ;;(define-extern ecoventrock-break object) ;; unknown type ;;(define-extern ecoventrock-idle object) ;; unknown type -;;(define-extern *grottopole-sg* object) ;; unknown type +(define-extern *grottopole-sg* skeleton-group) ;;(define-extern grottopole-idle object) ;; unknown type ;;(define-extern grottopole-moving-up object) ;; unknown type ;;(define-extern grottopole-moving-down object) ;; unknown type -;;(define-extern *windmill-one-sg* object) ;; unknown type +(define-extern *windmill-one-sg* skeleton-group) ;;(define-extern windmill-one-idle object) ;; unknown type -;;(define-extern *flutflut-naked-sg* object) ;; unknown type +(define-extern *flutflut-naked-sg* skeleton-group) ;; ---------------------- @@ -23517,7 +23513,7 @@ ;; - Unknowns -;;(define-extern *bird-lady-sg* object) ;; unknown type +(define-extern *bird-lady-sg* skeleton-group) ;; ---------------------- @@ -23586,7 +23582,7 @@ ;; - Unknowns -;;(define-extern *bird-lady-beach-sg* object) ;; unknown type +(define-extern *bird-lady-beach-sg* skeleton-group) ;; ---------------------- @@ -23657,7 +23653,7 @@ ;; - Unknowns -;;(define-extern *mayor-sg* object) ;; unknown type +(define-extern *mayor-sg* skeleton-group) ;; ---------------------- @@ -23729,8 +23725,8 @@ ;; - Unknowns -;;(define-extern *sculptor-sg* object) ;; unknown type -;;(define-extern *sculptor-muse-sg* object) ;; unknown type +(define-extern *sculptor-sg* skeleton-group) +(define-extern *sculptor-muse-sg* skeleton-group) ;; ---------------------- @@ -23743,15 +23739,15 @@ ; (deftype pelican-bank (basic) ; ((circle-speed meters :offset-assert 4) -; (dive-time useconds :offset-assert 8) -; (to-nest0-time useconds :offset-assert 16) -; (to-nest1-time useconds :offset-assert 24) -; (land-time useconds :offset-assert 32) -; (from-nest-time useconds :offset-assert 40) -; (spit-time useconds :offset-assert 48) -; (pre-spit-wait-time useconds :offset-assert 56) -; (post-spit-wait-time useconds :offset-assert 64) -; (run-away-time useconds :offset-assert 72) +; (dive-time seconds :offset-assert 8) +; (to-nest0-time seconds :offset-assert 16) +; (to-nest1-time seconds :offset-assert 24) +; (land-time seconds :offset-assert 32) +; (from-nest-time seconds :offset-assert 40) +; (spit-time seconds :offset-assert 48) +; (pre-spit-wait-time seconds :offset-assert 56) +; (post-spit-wait-time seconds :offset-assert 64) +; (run-away-time seconds :offset-assert 72) ; ) ; :method-count-assert 9 ; :size-assert #x50 @@ -23797,7 +23793,7 @@ ;; - Unknowns -;;(define-extern *pelican-sg* object) ;; unknown type +(define-extern *pelican-sg* skeleton-group) ;;(define-extern pelican-wait-at-end object) ;; unknown type ;;(define-extern pelican-wait-at-nest object) ;; unknown type ;;(define-extern pelican-circle object) ;; unknown type @@ -23847,7 +23843,7 @@ ;; - Unknowns -;;(define-extern *lurkerworm-sg* object) ;; unknown type +(define-extern *lurkerworm-sg* skeleton-group) ;;(define-extern lurkerworm-idle object) ;; unknown type ;;(define-extern lurkerworm-rest object) ;; unknown type ;;(define-extern lurkerworm-strike object) ;; unknown type @@ -23881,8 +23877,8 @@ ;; - Unknowns -;;(define-extern *lurkercrab-sg* object) ;; unknown type -;;(define-extern *lurkercrab-nav-enemy-info* object) ;; unknown type +(define-extern *lurkercrab-sg* skeleton-group) +(define-extern *lurkercrab-nav-enemy-info* nav-enemy-info) ;;(define-extern lurkercrab-pushed object) ;; unknown type @@ -23904,8 +23900,8 @@ ;; - Unknowns -;;(define-extern *lurkerpuppy-sg* object) ;; unknown type -;;(define-extern *lurkerpuppy-nav-enemy-info* object) ;; unknown type +(define-extern *lurkerpuppy-sg* skeleton-group) +(define-extern *lurkerpuppy-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -23973,7 +23969,7 @@ ;; - Unknowns -;;(define-extern *lrocklrg-sg* object) ;; unknown type +(define-extern *lrocklrg-sg* skeleton-group) ;; ---------------------- @@ -24062,7 +24058,7 @@ ;;(define-extern seagullflock-idle object) ;; unknown type ;;(define-extern seagullflock-at-waterfall object) ;; unknown type ;;(define-extern aybabtu object) ;; unknown type -;;(define-extern *seagull-sg* object) ;; unknown type +(define-extern *seagull-sg* skeleton-group) ;;(define-extern seagull-idle object) ;; unknown type ;;(define-extern seagull-soaring object) ;; unknown type ;;(define-extern seagull-flying object) ;; unknown type @@ -24606,8 +24602,8 @@ ;; - Unknowns -;;(define-extern *village-cam-sg* object) ;; unknown type -;;(define-extern *warp-gate-switch-sg* object) ;; unknown type +(define-extern *village-cam-sg* skeleton-group) +(define-extern *warp-gate-switch-sg* skeleton-group) ;; ---------------------- @@ -24678,7 +24674,7 @@ ;; - Unknowns -;;(define-extern *oracle-sg* object) ;; unknown type +(define-extern *oracle-sg* skeleton-group) ;; ---------------------- @@ -24689,81 +24685,72 @@ ;; - Types -; (deftype battlecontroller-spawner (structure) -; ((path basic :offset-assert 0) -; (creature uint64 :offset-assert 8) -; (trigger-actor basic :offset-assert 16) -; (blocker-actor basic :offset-assert 20) -; (state int8 :offset-assert 24) -; (enabled basic :offset-assert 28) -; ) -; :method-count-assert 9 -; :size-assert #x20 -; :flag-assert #x900000020 -; ) +(deftype battlecontroller-spawner (structure) + ((path basic :offset-assert 0) + (creature uint64 :offset-assert 8) + (trigger-actor basic :offset-assert 16) + (blocker-actor basic :offset-assert 20) + (state int8 :offset-assert 24) + (enabled basic :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype battlecontroller-creature-type (structure) -; ((type2 basic :offset-assert 0) -; (percent float :offset-assert 4) -; (pickup-percent float :offset-assert 8) -; (pickup-type int32 :offset-assert 12) -; (max-pickup-count int8 :offset-assert 16) -; (pickup-count int8 :offset-assert 17) -; ) -; :method-count-assert 9 -; :size-assert #x12 -; :flag-assert #x900000012 -; ) +(deftype battlecontroller-creature-type (structure) + ((type2 basic :offset-assert 0) + (percent float :offset-assert 4) + (pickup-percent float :offset-assert 8) + (pickup-type int32 :offset-assert 12) + (max-pickup-count int8 :offset-assert 16) + (pickup-count int8 :offset-assert 17) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x12 + :flag-assert #x900000012 + ) -; (deftype battlecontroller (process-drawable) -; ((final-pickup-spawn-point vector :inline :offset-assert 176) -; (activate-distance float :offset-assert 192) -; (max-spawn-count int16 :offset-assert 196) -; (spawn-count int16 :offset-assert 198) -; (die-count int16 :offset-assert 200) -; (target-count int8 :offset-assert 202) -; (spawner-count int8 :offset-assert 203) -; (creature-type-count int8 :offset-assert 204) -; (spawner-array UNKNOWN 8 :offset-assert 208) -; (spawn-period uint64 :offset-assert 464) -; (path-spawn basic :offset-assert 472) -; (creature-type-array UNKNOWN 4 :offset-assert 476) -; (final-pickup-type int32 :offset-assert 604) -; (prespawn basic :offset-assert 608) -; (noticed-player basic :offset-assert 612) -; (camera-on basic :offset-assert 616) -; (misty-ambush-collision-hack basic :offset-assert 620) -; (disable-ocean basic :offset-assert 624) -; (disable-near-ocean basic :offset-assert 628) -; (disable-mid-ocean basic :offset-assert 632) -; ) -; :method-count-assert 29 -; :size-assert #x27c -; :flag-assert #x1d0210027c -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; ) -; ) +(deftype battlecontroller (process-drawable) + ((final-pickup-spawn-point vector :inline :offset-assert 176) + (activate-distance float :offset-assert 192) + (max-spawn-count int16 :offset-assert 196) + (spawn-count int16 :offset-assert 198) + (die-count int16 :offset-assert 200) + (target-count int8 :offset-assert 202) + (spawner-count int8 :offset-assert 203) + (creature-type-count int8 :offset-assert 204) + (spawner-array battlecontroller-spawner 8 :inline :offset-assert 208) + (spawn-period uint64 :offset-assert 464) + (path-spawn basic :offset-assert 472) + (creature-type-array battlecontroller-creature-type 4 :inline :offset-assert 476) + (final-pickup-type int32 :offset-assert 604) + (prespawn basic :offset-assert 608) + (noticed-player basic :offset-assert 612) + (camera-on basic :offset-assert 616) + (misty-ambush-collision-hack basic :offset-assert 620) + (disable-ocean basic :offset-assert 624) + (disable-near-ocean basic :offset-assert 628) + (disable-mid-ocean basic :offset-assert 632) + ) + :method-count-assert 29 + :size-assert #x27c + :heap-base #x210 + :flag-assert #x1d0210027c + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (battlecontroller-play-intro-camera () none 22) ;; state + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (battlecontroller-die () none 26) ;; state + (dummy-27 () none 27) + (dummy-28 () none 28) + ) + ) ;; - Functions @@ -24818,34 +24805,24 @@ ;; - Types -; (deftype citb-arm-section (process-drawable) -; ((sync sync-info :inline :offset-assert 176) -; (cull-dir-local vector :inline :offset-assert 192) -; (cull-dot float :offset-assert 208) -; (rot-scale float :offset-assert 212) -; (y-angle float :offset-assert 216) -; ) -; :method-count-assert 23 -; :size-assert #xdc -; :flag-assert #x17007000dc -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; ) -; ) +(deftype citb-arm-section (process-drawable) + ((sync sync-info :inline :offset-assert 176) + (cull-dir-local vector :inline :offset-assert 192) + (cull-dot float :offset-assert 208) + (rot-scale float :offset-assert 212) + (y-angle float :offset-assert 216) + ) + :method-count-assert 23 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x17007000dc + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (idle () none 22) ;; state + ) + ) ; (deftype citb-arm (citb-arm-section) ; () @@ -25447,47 +25424,47 @@ ;; - Unknowns -;;(define-extern *citadelcam-sg* object) ;; unknown type +(define-extern *citadelcam-sg* skeleton-group) ;;(define-extern citadelcam-idle object) ;; unknown type ;;(define-extern citadelcam-stair-plats object) ;; unknown type ;;(define-extern citb-generator-broken object) ;; unknown type ;;(define-extern citb-generator-idle object) ;; unknown type -;;(define-extern *citb-generator-sg* object) ;; unknown type -;;(define-extern *citb-generator-broken-sg* object) ;; unknown type +(define-extern *citb-generator-sg* skeleton-group) +(define-extern *citb-generator-broken-sg* skeleton-group) ;;(define-extern citb-generator-break object) ;; unknown type -;;(define-extern *citb-hose-sg* object) ;; unknown type +(define-extern *citb-hose-sg* skeleton-group) ;;(define-extern citb-hose-die object) ;; unknown type ;;(define-extern citb-hose-idle object) ;; unknown type ;;(define-extern citb-hose-spawn object) ;; unknown type -;;(define-extern *citb-coil-sg* object) ;; unknown type +(define-extern *citb-coil-sg* skeleton-group) ;;(define-extern citb-coil-broken object) ;; unknown type ;;(define-extern citb-coil-idle object) ;; unknown type ;;(define-extern citb-coil-break object) ;; unknown type -;;(define-extern *citb-robotboss-sg* object) ;; unknown type +(define-extern *citb-robotboss-sg* skeleton-group) ;;(define-extern citb-robotboss-die object) ;; unknown type ;;(define-extern citb-robotboss-idle object) ;; unknown type -;;(define-extern *citb-robotboss-nose-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-head-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-gun-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-leftshoulder-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-rightshoulder-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-leftarm-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-rightarm-sg* object) ;; unknown type -;;(define-extern *citb-robotboss-belly-sg* object) ;; unknown type -;;(define-extern *citb-launcher-sg* object) ;; unknown type -;;(define-extern *citb-button-sg* object) ;; unknown type -;;(define-extern *citb-iris-door-sg* object) ;; unknown type -;;(define-extern *citb-disc-d-sg* object) ;; unknown type -;;(define-extern *citb-disc-c-sg* object) ;; unknown type -;;(define-extern *citb-disc-b-sg* object) ;; unknown type -;;(define-extern *citb-disc-a-sg* object) ;; unknown type +(define-extern *citb-robotboss-nose-sg* skeleton-group) +(define-extern *citb-robotboss-head-sg* skeleton-group) +(define-extern *citb-robotboss-gun-sg* skeleton-group) +(define-extern *citb-robotboss-leftshoulder-sg* skeleton-group) +(define-extern *citb-robotboss-rightshoulder-sg* skeleton-group) +(define-extern *citb-robotboss-leftarm-sg* skeleton-group) +(define-extern *citb-robotboss-rightarm-sg* skeleton-group) +(define-extern *citb-robotboss-belly-sg* skeleton-group) +(define-extern *citb-launcher-sg* skeleton-group) +(define-extern *citb-button-sg* skeleton-group) +(define-extern *citb-iris-door-sg* skeleton-group) +(define-extern *citb-disc-d-sg* skeleton-group) +(define-extern *citb-disc-c-sg* skeleton-group) +(define-extern *citb-disc-b-sg* skeleton-group) +(define-extern *citb-disc-a-sg* skeleton-group) ;;(define-extern citb-disc-idle object) ;; unknown type -;;(define-extern *citb-arm-shoulder-b-sg* object) ;; unknown type -;;(define-extern *citb-arm-shoulder-a-sg* object) ;; unknown type -;;(define-extern *citb-arm-d-sg* object) ;; unknown type -;;(define-extern *citb-arm-c-sg* object) ;; unknown type -;;(define-extern *citb-arm-b-sg* object) ;; unknown type -;;(define-extern *citb-arm-a-sg* object) ;; unknown type +(define-extern *citb-arm-shoulder-b-sg* skeleton-group) +(define-extern *citb-arm-shoulder-a-sg* skeleton-group) +(define-extern *citb-arm-d-sg* skeleton-group) +(define-extern *citb-arm-c-sg* skeleton-group) +(define-extern *citb-arm-b-sg* skeleton-group) +(define-extern *citb-arm-a-sg* skeleton-group) ;; ---------------------- @@ -25498,32 +25475,22 @@ ;; - Types -; (deftype citb-base-plat (process-drawable) -; ((idle-distance float :offset-assert 176) -; ) -; :method-count-assert 25 -; :size-assert #xb4 -; :flag-assert #x19005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; ) -; ) +(deftype citb-base-plat (process-drawable) + ((idle-distance float :offset-assert 176) + ) + :method-count-assert 25 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x19005000b4 + ;; inherited inspect of process-drawable + (:methods + (citb-base-plat-idle () none 20) ;; state + (dummy-21 () none 21) + (dummy-22 () none 22) + (citb-base-plat-active () none 23) ;; state + (dummy-24 () none 24) + ) + ) ; (deftype citb-plat-eco (plat-eco) ; () @@ -25822,21 +25789,21 @@ ;; - Unknowns ;;(define-extern citb-exit-plat-idle object) ;; unknown type -;;(define-extern *citb-exit-plat-sg* object) ;; unknown type +(define-extern *citb-exit-plat-sg* skeleton-group) ;;(define-extern citb-exit-plat-rise object) ;; unknown type -;;(define-extern *citb-firehose-sg* object) ;; unknown type +(define-extern *citb-firehose-sg* skeleton-group) ;;(define-extern citb-firehose-idle object) ;; unknown type ;;(define-extern citb-firehose-active object) ;; unknown type ;;(define-extern citb-firehose-blast object) ;; unknown type -;;(define-extern *citb-stopbox-sg* object) ;; unknown type -;;(define-extern *citb-donut-sg* object) ;; unknown type -;;(define-extern *citb-rotatebox-sg* object) ;; unknown type -;;(define-extern *citb-chain-plat-sg* object) ;; unknown type +(define-extern *citb-stopbox-sg* skeleton-group) +(define-extern *citb-donut-sg* skeleton-group) +(define-extern *citb-rotatebox-sg* skeleton-group) +(define-extern *citb-chain-plat-sg* skeleton-group) ;;(define-extern *citb-chain-plat-constants* object) ;; unknown type ;;(define-extern citb-chain-plat-settle object) ;; unknown type -;;(define-extern *plat-citb-sg* object) ;; unknown type -;;(define-extern *plat-eco-citb-lit-sg* object) ;; unknown type -;;(define-extern *plat-eco-citb-unlit-sg* object) ;; unknown type +(define-extern *plat-citb-sg* skeleton-group) +(define-extern *plat-eco-citb-lit-sg* skeleton-group) +(define-extern *plat-eco-citb-unlit-sg* skeleton-group) ;; ---------------------- @@ -26174,15 +26141,15 @@ ;; - Unknowns -;;(define-extern *green-sagecage-sg* object) ;; unknown type -;;(define-extern *robotboss-sg* object) ;; unknown type -;;(define-extern *evilbro-citadel-sg* object) ;; unknown type -;;(define-extern *evilsis-citadel-sg* object) ;; unknown type -;;(define-extern *yellowsage-sg* object) ;; unknown type -;;(define-extern *bluesage-sg* object) ;; unknown type -;;(define-extern *redsage-sg* object) ;; unknown type +(define-extern *green-sagecage-sg* skeleton-group) +(define-extern *robotboss-sg* skeleton-group) +(define-extern *evilbro-citadel-sg* skeleton-group) +(define-extern *evilsis-citadel-sg* skeleton-group) +(define-extern *yellowsage-sg* skeleton-group) +(define-extern *bluesage-sg* skeleton-group) +(define-extern *redsage-sg* skeleton-group) ;;(define-extern citb-sagecage-idle object) ;; unknown type -;;(define-extern *citb-sagecage-sg* object) ;; unknown type +(define-extern *citb-sagecage-sg* skeleton-group) ;; ---------------------- @@ -26312,8 +26279,8 @@ ;; - Unknowns ;;(define-extern *snow-bunny* object) ;; unknown type -;;(define-extern *snow-bunny-nav-enemy-info* object) ;; unknown type -;;(define-extern *snow-bunny-sg* object) ;; unknown type +(define-extern *snow-bunny-nav-enemy-info* nav-enemy-info) +(define-extern *snow-bunny-sg* skeleton-group) ;; ---------------------- @@ -26404,8 +26371,8 @@ ;; - Unknowns -;;(define-extern *citb-bunny-nav-enemy-info* object) ;; unknown type -;;(define-extern *citb-bunny-sg* object) ;; unknown type +(define-extern *citb-bunny-nav-enemy-info* nav-enemy-info) +(define-extern *citb-bunny-sg* skeleton-group) ;; ---------------------- @@ -26503,11 +26470,11 @@ ;;(define-extern citb-drop-plat-idle object) ;; unknown type ;;(define-extern citb-drop-plat-active object) ;; unknown type ;;(define-extern drop-plat-spawn object) ;; unknown type -;;(define-extern *citb-drop-plat-red-sg* object) ;; unknown type -;;(define-extern *citb-drop-plat-green-sg* object) ;; unknown type -;;(define-extern *citb-drop-plat-blue-sg* object) ;; unknown type -;;(define-extern *citb-drop-plat-yellow-sg* object) ;; unknown type -;;(define-extern *citb-drop-plat-sg* object) ;; unknown type +(define-extern *citb-drop-plat-red-sg* skeleton-group) +(define-extern *citb-drop-plat-green-sg* skeleton-group) +(define-extern *citb-drop-plat-blue-sg* skeleton-group) +(define-extern *citb-drop-plat-yellow-sg* skeleton-group) +(define-extern *citb-drop-plat-sg* skeleton-group) ;;(define-extern drop-plat-die object) ;; unknown type ;;(define-extern drop-plat-idle object) ;; unknown type ;;(define-extern drop-plat-drop object) ;; unknown type @@ -26587,7 +26554,7 @@ ;; - Unknowns -;;(define-extern *assistant-lavatube-end-sg* object) ;; unknown type +(define-extern *assistant-lavatube-end-sg* skeleton-group) ;; ---------------------- @@ -26998,7 +26965,7 @@ ;; - Unknowns -;;(define-extern *cavecrystal-sg* object) ;; unknown type +(define-extern *cavecrystal-sg* skeleton-group) ;;(define-extern *cavecrystal-light-control* object) ;; unknown type ;;(define-extern cavecrystal-idle object) ;; unknown type ;;(define-extern cavecrystal-active object) ;; unknown type @@ -27488,11 +27455,11 @@ ;; - Unknowns -;;(define-extern *light-eco-big-sg* object) ;; unknown type +(define-extern *light-eco-big-sg* skeleton-group) ;;(define-extern light-eco-mother-appear object) ;; unknown type ;;(define-extern light-eco-mother-active object) ;; unknown type ;;(define-extern light-eco-mother-discipate object) ;; unknown type -;;(define-extern *light-eco-small-sg* object) ;; unknown type +(define-extern *light-eco-small-sg* skeleton-group) ;;(define-extern light-eco-child-appear object) ;; unknown type ;;(define-extern light-eco-child-die object) ;; unknown type ;;(define-extern light-eco-child-idle object) ;; unknown type @@ -27672,14 +27639,14 @@ ;; - Unknowns -;;(define-extern *redring-sg* object) ;; unknown type +(define-extern *redring-sg* skeleton-group) ;;(define-extern yellowshot-idle object) ;; unknown type ;;(define-extern redshot-idle object) ;; unknown type ;;(define-extern redshot-wait object) ;; unknown type ;;(define-extern redshot-explode object) ;; unknown type -;;(define-extern *greenshot-sg* object) ;; unknown type +(define-extern *greenshot-sg* skeleton-group) ;;(define-extern greenshot-idle object) ;; unknown type -;;(define-extern *darkecobomb-sg* object) ;; unknown type +(define-extern *darkecobomb-sg* skeleton-group) ;;(define-extern darkecobomb-idle object) ;; unknown type ;;(define-extern darkecobomb-land object) ;; unknown type ;;(define-extern darkecobomb-countdown object) ;; unknown type @@ -27815,13 +27782,13 @@ ;; - Unknowns -;;(define-extern *finalbosscam-sg* object) ;; unknown type -;;(define-extern *silodoor-sg* object) ;; unknown type -;;(define-extern *ecoclaw-sg* object) ;; unknown type +(define-extern *finalbosscam-sg* skeleton-group) +(define-extern *silodoor-sg* skeleton-group) +(define-extern *ecoclaw-sg* skeleton-group) ;;(define-extern *ecoclaw* object) ;; unknown type ;;(define-extern ecoclaw-idle object) ;; unknown type ;;(define-extern ecoclaw-activate object) ;; unknown type -;;(define-extern *med-res-snow1-sg* object) ;; unknown type +(define-extern *med-res-snow1-sg* skeleton-group) ;; ---------------------- @@ -27946,8 +27913,8 @@ ;;(define-extern spawn-minions object) ;; unknown type ;;(define-extern green-eco-lurker-wait-to-appear object) ;; unknown type -;;(define-extern *green-eco-lurker-sg* object) ;; unknown type -;;(define-extern *green-eco-lurker-nav-enemy-info* object) ;; unknown type +(define-extern *green-eco-lurker-sg* skeleton-group) +(define-extern *green-eco-lurker-nav-enemy-info* nav-enemy-info) ;;(define-extern green-eco-lurker-appear-land object) ;; unknown type ;;(define-extern green-eco-lurker-appear object) ;; unknown type ;;(define-extern green-eco-lurker-tune-spheres object) ;; unknown type @@ -28006,7 +27973,7 @@ ;;(define-extern robotboss-blue-wait object) ;; unknown type ;;(define-extern robotboss-blue-dark-bomb object) ;; unknown type -;;(define-extern *robotboss-blueeco-sg* object) ;; unknown type +(define-extern *robotboss-blueeco-sg* skeleton-group) ;;(define-extern robotboss-blue-dark-bomb-wait object) ;; unknown type ;;(define-extern robotboss-green object) ;; unknown type ;;(define-extern robotboss-green-wait object) ;; unknown type @@ -28015,12 +27982,12 @@ ;;(define-extern robotboss-red object) ;; unknown type ;;(define-extern robotboss-red-wait object) ;; unknown type ;;(define-extern robotboss-red-dark-bomb object) ;; unknown type -;;(define-extern *robotboss-redeco-sg* object) ;; unknown type +(define-extern *robotboss-redeco-sg* skeleton-group) ;;(define-extern robotboss-red-dark-bomb-wait object) ;; unknown type ;;(define-extern robotboss-yellow object) ;; unknown type ;;(define-extern robotboss-yellow-wait object) ;; unknown type ;;(define-extern robotboss-yellow-dark-bomb object) ;; unknown type -;;(define-extern *robotboss-yelloweco-sg* object) ;; unknown type +(define-extern *robotboss-yelloweco-sg* skeleton-group) ;;(define-extern robotboss-white-eco-movie object) ;; unknown type ;;(define-extern robotboss-daxter-sacrifice-movie object) ;; unknown type ;;(define-extern robotboss-yellow-dark-bomb-wait object) ;; unknown type @@ -28075,29 +28042,19 @@ ; ) ; ) -; (deftype final-door (process-drawable) -; () -; :method-count-assert 23 -; :size-assert #xb0 -; :flag-assert #x17004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; ) -; ) +(deftype final-door (process-drawable) + () + :method-count-assert 23 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x17004000b0 + ;; not enough basic ops + (:methods + (idle () none 20) ;; state + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) ; (deftype power-left (final-door) ; () @@ -28180,9 +28137,9 @@ ;; - Unknowns -;;(define-extern *powercellalt-sg* object) ;; unknown type -;;(define-extern *power-right-sg* object) ;; unknown type -;;(define-extern *power-left-sg* object) ;; unknown type +(define-extern *powercellalt-sg* skeleton-group) +(define-extern *power-right-sg* skeleton-group) +(define-extern *power-left-sg* skeleton-group) ;; ---------------------- @@ -28320,12 +28277,12 @@ ;; - Unknowns -;;(define-extern *sage-finalboss-sg* object) ;; unknown type +(define-extern *sage-finalboss-sg* skeleton-group) ;;(define-extern sage-finalboss-credits object) ;; unknown type -;;(define-extern *jak-white-sg* object) ;; unknown type -;;(define-extern *robotboss-cinematic-sg* object) ;; unknown type -;;(define-extern *plat-eco-finalboss-lit-sg* object) ;; unknown type -;;(define-extern *plat-eco-finalboss-unlit-sg* object) ;; unknown type +(define-extern *jak-white-sg* skeleton-group) +(define-extern *robotboss-cinematic-sg* skeleton-group) +(define-extern *plat-eco-finalboss-lit-sg* skeleton-group) +(define-extern *plat-eco-finalboss-unlit-sg* skeleton-group) ;; ---------------------- @@ -28681,8 +28638,8 @@ ;; - Unknowns -;;(define-extern *evilsis-intro-sg* object) ;; unknown type -;;(define-extern *evilbro-intro-sg* object) ;; unknown type +(define-extern *evilsis-intro-sg* skeleton-group) +(define-extern *evilbro-intro-sg* skeleton-group) ;; ---------------------- @@ -28809,8 +28766,8 @@ ;; - Unknowns -;;(define-extern *jng-iris-door-sg* object) ;; unknown type -;;(define-extern *eggtop-sg* object) ;; unknown type +(define-extern *jng-iris-door-sg* skeleton-group) +(define-extern *eggtop-sg* skeleton-group) ;;(define-extern eggtop-close object) ;; unknown type ;;(define-extern eggtop-idle object) ;; unknown type @@ -28855,7 +28812,7 @@ ;; - Unknowns -;;(define-extern *plat-flip-sg* object) ;; unknown type +(define-extern *plat-flip-sg* skeleton-group) ;;(define-extern plat-flip-idle object) ;; unknown type @@ -28962,8 +28919,8 @@ ;; - Unknowns -;;(define-extern *aphid-sg* object) ;; unknown type -;;(define-extern *aphid-nav-enemy-info* object) ;; unknown type +(define-extern *aphid-sg* skeleton-group) +(define-extern *aphid-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -29011,7 +28968,7 @@ ;; - Unknowns -;;(define-extern *plant-boss-sg* object) ;; unknown type +(define-extern *plant-boss-sg* skeleton-group) ;;(define-extern *plant-boss-shadow-control* object) ;; unknown type ;;(define-extern plant-boss-dead object) ;; unknown type ;;(define-extern plant-boss-far-idle object) ;; unknown type @@ -29024,20 +28981,20 @@ ;;(define-extern plant-boss-hit object) ;; unknown type ;;(define-extern plant-boss-vulnerable object) ;; unknown type ;;(define-extern plant-boss-intro object) ;; unknown type -;;(define-extern *plant-boss-leaf-sg* object) ;; unknown type +(define-extern *plant-boss-leaf-sg* skeleton-group) ;;(define-extern plant-boss-leaf-idle object) ;; unknown type ;;(define-extern plant-boss-leaf-die object) ;; unknown type ;;(define-extern plant-boss-leaf-open-idle object) ;; unknown type ;;(define-extern plant-boss-leaf-close object) ;; unknown type ;;(define-extern plant-boss-leaf-bounce object) ;; unknown type ;;(define-extern plant-boss-leaf-open object) ;; unknown type -;;(define-extern *plant-boss-root-sg* object) ;; unknown type +(define-extern *plant-boss-root-sg* skeleton-group) ;;(define-extern plant-boss-root-idle object) ;; unknown type -;;(define-extern *plant-boss-vine-sg* object) ;; unknown type +(define-extern *plant-boss-vine-sg* skeleton-group) ;;(define-extern plant-boss-vine-idle object) ;; unknown type -;;(define-extern *plant-boss-back-arms-sg* object) ;; unknown type +(define-extern *plant-boss-back-arms-sg* skeleton-group) ;;(define-extern plant-boss-back-arms-idle object) ;; unknown type -;;(define-extern *plant-boss-arm-sg* object) ;; unknown type +(define-extern *plant-boss-arm-sg* skeleton-group) ;;(define-extern plant-boss-arm-idle object) ;; unknown type ;;(define-extern plant-boss-root-die object) ;; unknown type ;;(define-extern plant-boss-vine-die object) ;; unknown type @@ -29281,7 +29238,7 @@ ;; - Unknowns -;;(define-extern *bouncer-sg* object) ;; unknown type +(define-extern *bouncer-sg* skeleton-group) ;;(define-extern bouncer-wait object) ;; unknown type ;;(define-extern bouncer-fire object) ;; unknown type ;;(define-extern bouncer-smush object) ;; unknown type @@ -29295,84 +29252,15 @@ ;; - Types -; (deftype hopper (nav-enemy) -; ((jump-length float :offset-assert 400) -; (shadow-min-y float :offset-assert 404) -; ) -; :method-count-assert 76 -; :size-assert #x198 -; :flag-assert #x4c01300198 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype hopper (nav-enemy) + ((jump-length float :offset-assert 400) + (shadow-min-y float :offset-assert 404) + ) + :method-count-assert 76 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x4c01300198 + ) ;; - Functions @@ -29382,8 +29270,8 @@ ;; - Unknowns -;;(define-extern *hopper-sg* object) ;; unknown type -;;(define-extern *hopper-nav-enemy-info* object) ;; unknown type +(define-extern *hopper-sg* skeleton-group) +(define-extern *hopper-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -29458,7 +29346,7 @@ ;; - Unknowns -;;(define-extern *junglesnake-sg* object) ;; unknown type +(define-extern *junglesnake-sg* skeleton-group) ;;(define-extern junglesnake-sleeping object) ;; unknown type ;;(define-extern *junglesnake-twist-max-deltas* object) ;; unknown type ;;(define-extern junglesnake-tracking object) ;; unknown type @@ -29510,7 +29398,7 @@ ;; - Unknowns -;;(define-extern *darkvine-sg* object) ;; unknown type +(define-extern *darkvine-sg* skeleton-group) ;;(define-extern darkvine-die object) ;; unknown type ;;(define-extern darkvine-idle object) ;; unknown type ;;(define-extern darkvine-retreat object) ;; unknown type @@ -29873,30 +29761,30 @@ ;; - Unknowns ;;(define-extern ripple-for-jungle-water object) ;; unknown type -;;(define-extern *jngpusher-sg* object) ;; unknown type +(define-extern *jngpusher-sg* skeleton-group) ;;(define-extern jngpusher-idle object) ;; unknown type -;;(define-extern *sidedoor-sg* object) ;; unknown type -;;(define-extern *maindoor-sg* object) ;; unknown type +(define-extern *sidedoor-sg* skeleton-group) +(define-extern *maindoor-sg* skeleton-group) ;;(define-extern maindoor-open object) ;; unknown type ;;(define-extern maindoor-closed object) ;; unknown type -;;(define-extern *precurbridge-sg* object) ;; unknown type +(define-extern *precurbridge-sg* skeleton-group) ;;(define-extern precurbridge-active object) ;; unknown type ;;(define-extern precurbridge-idle object) ;; unknown type -;;(define-extern *junglecam-sg* object) ;; unknown type +(define-extern *junglecam-sg* skeleton-group) ;;(define-extern precurbridge-activate object) ;; unknown type -;;(define-extern *accordian-sg* object) ;; unknown type +(define-extern *accordian-sg* skeleton-group) ;;(define-extern accordian-idle object) ;; unknown type -;;(define-extern *lurkerm-piston-sg* object) ;; unknown type +(define-extern *lurkerm-piston-sg* skeleton-group) ;;(define-extern lurkerm-piston-idle object) ;; unknown type -;;(define-extern *lurkerm-short-sail-sg* object) ;; unknown type +(define-extern *lurkerm-short-sail-sg* skeleton-group) ;;(define-extern lurkerm-short-sail-idle object) ;; unknown type -;;(define-extern *lurkerm-tall-sail-sg* object) ;; unknown type +(define-extern *lurkerm-tall-sail-sg* skeleton-group) ;;(define-extern lurkerm-tall-sail-idle object) ;; unknown type -;;(define-extern *towertop-sg* object) ;; unknown type +(define-extern *towertop-sg* skeleton-group) ;;(define-extern towertop-idle object) ;; unknown type -;;(define-extern *logtrap-sg* object) ;; unknown type -;;(define-extern *med-res-firecanyon-sg* object) ;; unknown type -;;(define-extern *jungle-camera-sg* object) ;; unknown type +(define-extern *logtrap-sg* skeleton-group) +(define-extern *med-res-firecanyon-sg* skeleton-group) +(define-extern *jungle-camera-sg* skeleton-group) ;; ---------------------- @@ -29911,17 +29799,17 @@ ; ((y-offset meters :offset-assert 176) ; (y-offset-grips meters :offset-assert 180) ; (height meters :offset-assert 184) -; (turn deg :offset-assert 188) -; (tilt deg :offset-assert 192) -; (target-turn deg :offset-assert 196) -; (target-tilt deg :offset-assert 200) +; (turn degrees :offset-assert 188) +; (tilt degrees :offset-assert 192) +; (target-turn degrees :offset-assert 196) +; (target-tilt degrees :offset-assert 200) ; (base vector :inline :offset-assert 208) ; (reflector-trans vector :inline :offset-assert 224) ; (next-reflector-trans vector :inline :offset-assert 240) ; (prev-reflector-trans vector :inline :offset-assert 256) ; (old-camera-matrix matrix :inline :offset-assert 272) ; (reflector uint32 :offset-assert 336) -; (gauge-rot deg :offset-assert 340) +; (gauge-rot degrees :offset-assert 340) ; (lock-time uint64 :offset-assert 344) ; (aligned? basic :offset-assert 352) ; (raised? basic :offset-assert 356) @@ -30043,12 +29931,12 @@ ;; - Unknowns -;;(define-extern *reflector-mirror-sg* object) ;; unknown type +(define-extern *reflector-mirror-sg* skeleton-group) ;;(define-extern reflector-mirror-broken object) ;; unknown type ;;(define-extern reflector-mirror-idle object) ;; unknown type -;;(define-extern *reflector-mirror-break-sg* object) ;; unknown type +(define-extern *reflector-mirror-break-sg* skeleton-group) ;;(define-extern reflector-origin-idle object) ;; unknown type -;;(define-extern *periscope-base-sg* object) ;; unknown type +(define-extern *periscope-base-sg* skeleton-group) ;;(define-extern periscope-power-on object) ;; unknown type ;;(define-extern periscope-wait-for-player object) ;; unknown type ;;(define-extern periscope-idle object) ;; unknown type @@ -30056,7 +29944,7 @@ ;;(define-extern periscope-wait-for-power-input object) ;; unknown type ;;(define-extern periscope-player-control object) ;; unknown type ;;(define-extern periscope-activate object) ;; unknown type -;;(define-extern *periscope-mirror-sg* object) ;; unknown type +(define-extern *periscope-mirror-sg* skeleton-group) ;;(define-extern reflector-idle object) ;; unknown type @@ -30147,8 +30035,8 @@ ;; - Unknowns -;;(define-extern *junglefish-sg* object) ;; unknown type -;;(define-extern *junglefish-nav-enemy-info* object) ;; unknown type +(define-extern *junglefish-sg* skeleton-group) +(define-extern *junglefish-nav-enemy-info* nav-enemy-info) ;; ---------------------- @@ -30301,15 +30189,15 @@ ;; - Unknowns -;;(define-extern *fish-net-sg* object) ;; unknown type -;;(define-extern *fisher-sg* object) ;; unknown type +(define-extern *fish-net-sg* skeleton-group) +(define-extern *fisher-sg* skeleton-group) ;;(define-extern *FISHER-bank* object) ;; unknown type ;;(define-extern fisher-playing object) ;; unknown type ;;(define-extern *fisher-params* object) ;; unknown type ;;(define-extern fisher-done object) ;; unknown type -;;(define-extern *catch-fishc-sg* object) ;; unknown type -;;(define-extern *catch-fishb-sg* object) ;; unknown type -;;(define-extern *catch-fisha-sg* object) ;; unknown type +(define-extern *catch-fishc-sg* skeleton-group) +(define-extern *catch-fishb-sg* skeleton-group) +(define-extern *catch-fisha-sg* skeleton-group) ;;(define-extern fisher-fish-fall object) ;; unknown type ;;(define-extern fisher-fish-caught object) ;; unknown type ;;(define-extern fisher-fish-die object) ;; unknown type @@ -30391,8 +30279,8 @@ ;; - Unknowns -;;(define-extern *launcherdoor-maincave-sg* object) ;; unknown type -;;(define-extern *launcherdoor-sg* object) ;; unknown type +(define-extern *launcherdoor-maincave-sg* skeleton-group) +(define-extern *launcherdoor-sg* skeleton-group) ;;(define-extern launcherdoor-open object) ;; unknown type ;;(define-extern launcherdoor-closed object) ;; unknown type @@ -30747,9 +30635,9 @@ ; (rot vector :inline :offset-assert 80) ; (rot-old vector :inline :offset-assert 96) ; (rotv vector :inline :offset-assert 112) -; (lean-rotx deg :offset-assert 128) -; (change-roty deg :offset-assert 132) -; (change-roty-old deg :offset-assert 136) +; (lean-rotx degrees :offset-assert 128) +; (change-roty degrees :offset-assert 132) +; (change-roty-old degrees :offset-assert 136) ; (quat vector :inline :offset-assert 144) ; (surface-y meters :offset-assert 160) ; (surface-vy meters :offset-assert 164) @@ -30766,7 +30654,7 @@ ; (hill-value float :offset-assert 268) ; (hill-ground-value float :offset-assert 272) ; (hill-offset meters :offset-assert 276) -; (hill-rotx deg :offset-assert 280) +; (hill-rotx degrees :offset-assert 280) ; (hill-boost meters :offset-assert 284) ; (bob-timer float :offset-assert 288) ; (bob-meta-timer float :offset-assert 292) @@ -30776,19 +30664,19 @@ ; (bob-period float :offset-assert 308) ; (bob-meta-time uint64 :offset-assert 312) ; (bob-hit-ground-time uint64 :offset-assert 320) -; (cur-rotx deg :offset-assert 328) -; (targ-rotx deg :offset-assert 332) +; (cur-rotx degrees :offset-assert 328) +; (targ-rotx degrees :offset-assert 332) ; (speed-rotx float :offset-assert 336) -; (mult-rotx deg :offset-assert 340) +; (mult-rotx degrees :offset-assert 340) ; (front-blade basic :offset-assert 344) -; (front-rot deg :offset-assert 348) -; (front-rotv deg :offset-assert 352) +; (front-rot degrees :offset-assert 348) +; (front-rotv degrees :offset-assert 352) ; (bottom-blade basic :offset-assert 356) -; (bottom-rot deg :offset-assert 360) +; (bottom-rot degrees :offset-assert 360) ; (front basic :offset-assert 364) -; (front-turn deg :offset-assert 368) +; (front-turn degrees :offset-assert 368) ; (tail basic :offset-assert 372) -; (tail-tilt deg :offset-assert 376) +; (tail-tilt degrees :offset-assert 376) ; (transv-max meters :offset-assert 380) ; (slide-down-time UNKNOWN 2 :offset-assert 384) ; (slide-enter-time uint64 :offset-assert 400) @@ -30833,7 +30721,7 @@ ; ) ; (deftype racer-bank (basic) -; ((slide-hold-time useconds :offset-assert 8) +; ((slide-hold-time seconds :offset-assert 8) ; (heat-max float :offset-assert 16) ; (hotcoals-heat-inc float :offset-assert 20) ; (lava-heat-inc float :offset-assert 24) @@ -30848,8 +30736,8 @@ ; (boost-curve-max meters :offset-assert 60) ; (boost-level-max meters :offset-assert 64) ; (boost-level-inc meters :offset-assert 68) -; (boost-duration useconds :offset-assert 72) -; (default-front-blade deg :offset-assert 80) +; (boost-duration seconds :offset-assert 72) +; (default-front-blade degrees :offset-assert 80) ; (yellow-projectile-speed meters :offset-assert 84) ; ) ; :method-count-assert 9 @@ -30860,7 +30748,7 @@ ;; - Unknowns ;;(define-extern *RACER-bank* object) ;; unknown type -;;(define-extern *balloon-sg* object) ;; unknown type +(define-extern *balloon-sg* skeleton-group) ;; ---------------------- @@ -30995,9 +30883,9 @@ ;; - Unknowns -;;(define-extern *racer-sg* object) ;; unknown type +(define-extern *racer-sg* skeleton-group) ;;(define-extern *racer-shadow-control* object) ;; unknown type -;;(define-extern *racer-explode-sg* object) ;; unknown type +(define-extern *racer-explode-sg* skeleton-group) ;; ---------------------- @@ -31141,7 +31029,7 @@ ;; - Unknowns -;;(define-extern *ef-plane-sg* object) ;; unknown type +(define-extern *ef-plane-sg* skeleton-group) ;;(define-extern blocking-plane-idle object) ;; unknown type @@ -31201,7 +31089,7 @@ ;; - Unknowns -;;(define-extern *flutflut-sg* object) ;; unknown type +(define-extern *flutflut-sg* skeleton-group) ;;(define-extern *flutflut-shadow-control* object) ;; unknown type @@ -31282,63 +31170,24 @@ ;; - Types -; (deftype farmer (process-taskable) -; () -; :method-count-assert 53 -; :size-assert #x17c -; :flag-assert #x350110017c -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype farmer (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + (:methods + (dummy-method-11 (_type_ object) none 11) + (dummy-31 (_type_) none 31) + (dummy-32 (_type_ symbol) spool-anim 32) + (dummy-41 (_type_) none 41) + (dummy-43 (_type_) none 43) + ) + ) ;; - Unknowns -;;(define-extern *farmer-sg* object) ;; unknown type +(define-extern *farmer-sg* skeleton-group) ;; ---------------------- @@ -31405,7 +31254,7 @@ ;; - Unknowns -;;(define-extern *explorer-sg* object) ;; unknown type +(define-extern *explorer-sg* skeleton-group) ;; ---------------------- @@ -31477,7 +31326,7 @@ ;; - Unknowns -;;(define-extern *assistant-sg* object) ;; unknown type +(define-extern *assistant-sg* skeleton-group) ;; ---------------------- @@ -31546,7 +31395,7 @@ ;; - Unknowns -;;(define-extern *sage-sg* object) ;; unknown type +(define-extern *sage-sg* skeleton-group) ;; ---------------------- @@ -31557,104 +31406,92 @@ ;; - Types -; (deftype yakow-bank (basic) -; ((walk-cycle-frame-count float :offset-assert 4) -; (run-cycle-frame-count float :offset-assert 8) -; (walk-speed meters :offset-assert 12) -; (run-speed meters :offset-assert 16) -; (walk-anim-speed float :offset-assert 20) -; (run-anim-speed float :offset-assert 24) -; (walk-away-dist meters :offset-assert 28) -; (run-away-dist meters :offset-assert 32) -; (walk-rotate-speed float :offset-assert 36) -; (run-rotate-speed float :offset-assert 40) -; (walk-turn-time uint64 :offset-assert 48) -; (run-turn-time uint64 :offset-assert 56) -; (max-walk-speed float :offset-assert 64) -; (min-run-speed float :offset-assert 68) -; (walk-run-blend-rate float :offset-assert 72) -; (walk-turn-blend-rate float :offset-assert 76) -; (max-run-speed float :offset-assert 80) -; (acceleration meters :offset-assert 84) -; (default-patrol-time uint64 :offset-assert 88) -; (default-idle-distance meters :offset-assert 96) -; (safe-distance meters :offset-assert 100) -; (min-run-anim-speed float :offset-assert 104) -; (max-run-anim-speed float :offset-assert 108) -; (min-walk-anim-speed float :offset-assert 112) -; (speed-boost-impulse meters :offset-assert 116) -; ) -; :method-count-assert 9 -; :size-assert #x78 -; :flag-assert #x900000078 -; ) +(deftype yakow-bank (basic) + ((walk-cycle-frame-count float :offset-assert 4) + (run-cycle-frame-count float :offset-assert 8) + (walk-speed meters :offset-assert 12) + (run-speed meters :offset-assert 16) + (walk-anim-speed float :offset-assert 20) + (run-anim-speed float :offset-assert 24) + (walk-away-dist meters :offset-assert 28) + (run-away-dist meters :offset-assert 32) + (walk-rotate-speed float :offset-assert 36) + (run-rotate-speed float :offset-assert 40) + (walk-turn-time uint64 :offset-assert 48) + (run-turn-time uint64 :offset-assert 56) + (max-walk-speed float :offset-assert 64) + (min-run-speed float :offset-assert 68) + (walk-run-blend-rate float :offset-assert 72) + (walk-turn-blend-rate float :offset-assert 76) + (max-run-speed float :offset-assert 80) + (acceleration meters :offset-assert 84) + (default-patrol-time uint64 :offset-assert 88) + (default-idle-distance meters :offset-assert 96) + (safe-distance meters :offset-assert 100) + (min-run-anim-speed float :offset-assert 104) + (max-run-anim-speed float :offset-assert 108) + (min-walk-anim-speed float :offset-assert 112) + (speed-boost-impulse meters :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ) -; (deftype yakow (process-drawable) -; ((player-attack-id int32 :offset-assert 176) -; (walk-run-blend float :offset-assert 180) -; (walk-turn-blend float :offset-assert 184) -; (run-mode basic :offset-assert 188) -; (travel-speed meters :offset-assert 192) -; (final-speed meters :offset-assert 196) -; (rotate-speed float :offset-assert 200) -; (turn-time uint64 :offset-assert 208) -; (vulnerable basic :offset-assert 216) -; (grazing basic :offset-assert 220) -; (push-velocity vector :inline :offset-assert 224) -; (home-base vector :inline :offset-assert 240) -; (dest-base vector :inline :offset-assert 256) -; (dest-rot deg :offset-assert 272) -; (enable-turn-around basic :offset-assert 276) -; (rotating basic :offset-assert 280) -; (in-pen basic :offset-assert 284) -; ) -; :method-count-assert 20 -; :size-assert #x120 -; :flag-assert #x1400b00120 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype yakow (process-drawable) + ((player-attack-id int32 :offset-assert 176) + (walk-run-blend float :offset-assert 180) + (walk-turn-blend float :offset-assert 184) + (run-mode basic :offset-assert 188) + (travel-speed meters :offset-assert 192) + (final-speed meters :offset-assert 196) + (rotate-speed float :offset-assert 200) + (turn-time uint64 :offset-assert 208) + (vulnerable basic :offset-assert 216) + (grazing basic :offset-assert 220) + (push-velocity vector :inline :offset-assert 224) + (home-base vector :inline :offset-assert 240) + (dest-base vector :inline :offset-assert 256) + (dest-rot degrees :offset-assert 272) + (enable-turn-around basic :offset-assert 276) + (rotating basic :offset-assert 280) + (in-pen basic :offset-assert 284) + ) + :method-count-assert 20 + :size-assert #x120 + :heap-base #xb0 + :flag-assert #x1400b00120 + ;; inherited inspect of process-drawable + ) ;; - Functions -(define-extern yakow-task-complete? function) +(define-extern yakow-task-complete? (function symbol none :behavior yakow)) (define-extern yakow-facing-player? function) -(define-extern yakow-post function) +(define-extern yakow-post (function none :behavior yakow)) (define-extern yakow-facing-point? function) (define-extern yakow-facing-direction? function) (define-extern yakow-generate-travel-vector function) -(define-extern yakow-common-post function) -(define-extern yakow-cam function) -(define-extern yakow-default-event-handler function) +(define-extern yakow-common-post (function none :behavior yakow)) +(define-extern yakow-cam (function none)) +(define-extern yakow-default-event-handler (function process-drawable int symbol event-message-block object :behavior yakow)) (define-extern yakow-simple-post function) (define-extern yakow-run-post function) (define-extern yakow-blend-walk-run function) ;; - Unknowns -;;(define-extern *YAKOW-bank* object) ;; unknown type -;;(define-extern *yakow-sg* object) ;; unknown type -;;(define-extern yakow-graze object) ;; unknown type -;;(define-extern yakow-idle object) ;; unknown type -;;(define-extern yakow-run-away object) ;; unknown type -;;(define-extern yakow-graze-kicked object) ;; unknown type -;;(define-extern yakow-walk-to object) ;; unknown type -;;(define-extern yakow-notice object) ;; unknown type -;;(define-extern yakow-kicked object) ;; unknown type -;;(define-extern *village1cam-sg* object) ;; unknown type -;;(define-extern yakow-die object) ;; unknown type +(define-extern *YAKOW-bank* yakow-bank) +(define-extern *yakow-sg* skeleton-group) +(define-extern yakow-graze (state none)) +(define-extern yakow-idle (state none)) +(define-extern yakow-run-away state) +(define-extern yakow-graze-kicked state) +(define-extern yakow-walk-to state) +(define-extern yakow-notice state) +(define-extern yakow-kicked (state none)) +(define-extern *village1cam-sg* skeleton-group) +(define-extern yakow-die state) ;; ---------------------- @@ -32087,39 +31924,39 @@ ;; - Unknowns ;;(define-extern ripple-for-villagea-water object) ;; unknown type -;;(define-extern *revcycle-sg* object) ;; unknown type -;;(define-extern *revcycleprop-sg* object) ;; unknown type -;;(define-extern *hutlamp-sg* object) ;; unknown type +(define-extern *revcycle-sg* skeleton-group) +(define-extern *revcycleprop-sg* skeleton-group) +(define-extern *hutlamp-sg* skeleton-group) ;;(define-extern hutlamp-idle object) ;; unknown type ;;(define-extern village-fish-idle object) ;; unknown type ;;(define-extern villa-starfish-idle object) ;; unknown type ;;(define-extern starfish-idle object) ;; unknown type -;;(define-extern *starfish-sg* object) ;; unknown type -;;(define-extern *starfish-nav-enemy-info* object) ;; unknown type +(define-extern *starfish-sg* skeleton-group) +(define-extern *starfish-nav-enemy-info* nav-enemy-info) ;;(define-extern starfish-patrol object) ;; unknown type ;;(define-extern reflector-end-idle object) ;; unknown type -;;(define-extern *reflector-middle-sg* object) ;; unknown type +(define-extern *reflector-middle-sg* skeleton-group) ;;(define-extern reflector-middle-idle object) ;; unknown type -;;(define-extern *mayorgears-sg* object) ;; unknown type +(define-extern *mayorgears-sg* skeleton-group) ;;(define-extern mayorgears-idle object) ;; unknown type -;;(define-extern *windspinner-sg* object) ;; unknown type +(define-extern *windspinner-sg* skeleton-group) ;;(define-extern windspinner-idle object) ;; unknown type -;;(define-extern *sagesail-sg* object) ;; unknown type +(define-extern *sagesail-sg* skeleton-group) ;;(define-extern sagesail-idle object) ;; unknown type -;;(define-extern *windmill-sail-sg* object) ;; unknown type +(define-extern *windmill-sail-sg* skeleton-group) ;;(define-extern windmill-sail-idle object) ;; unknown type -;;(define-extern *med-res-jungle-sg* object) ;; unknown type -;;(define-extern *med-res-jungle1-sg* object) ;; unknown type -;;(define-extern *med-res-jungle2-sg* object) ;; unknown type -;;(define-extern *med-res-beach-sg* object) ;; unknown type -;;(define-extern *med-res-beach1-sg* object) ;; unknown type -;;(define-extern *med-res-beach2-sg* object) ;; unknown type -;;(define-extern *med-res-beach3-sg* object) ;; unknown type -;;(define-extern *med-res-misty-sg* object) ;; unknown type -;;(define-extern *med-res-village11-sg* object) ;; unknown type -;;(define-extern *med-res-village12-sg* object) ;; unknown type -;;(define-extern *med-res-village13-sg* object) ;; unknown type -;;(define-extern *med-res-training-sg* object) ;; unknown type +(define-extern *med-res-jungle-sg* skeleton-group) +(define-extern *med-res-jungle1-sg* skeleton-group) +(define-extern *med-res-jungle2-sg* skeleton-group) +(define-extern *med-res-beach-sg* skeleton-group) +(define-extern *med-res-beach1-sg* skeleton-group) +(define-extern *med-res-beach2-sg* skeleton-group) +(define-extern *med-res-beach3-sg* skeleton-group) +(define-extern *med-res-misty-sg* skeleton-group) +(define-extern *med-res-village11-sg* skeleton-group) +(define-extern *med-res-village12-sg* skeleton-group) +(define-extern *med-res-village13-sg* skeleton-group) +(define-extern *med-res-training-sg* skeleton-group) ;; ---------------------- @@ -32278,10 +32115,10 @@ ;; - Unknowns ;;(define-extern fishermans-boat-docked-village object) ;; unknown type -;;(define-extern *fb-evilbro-sg* object) ;; unknown type -;;(define-extern *fb-evilsis-sg* object) ;; unknown type +(define-extern *fb-evilbro-sg* skeleton-group) +(define-extern *fb-evilsis-sg* skeleton-group) ;;(define-extern fishermans-boat-docked-misty object) ;; unknown type -;;(define-extern *fishermans-boat-sg* object) ;; unknown type +(define-extern *fishermans-boat-sg* skeleton-group) ;;(define-extern *boat-turning-radius-table* object) ;; unknown type ;;(define-extern *boat-throttle-control-table* object) ;; unknown type ;;(define-extern *fishermans-boat-constants* object) ;; unknown type @@ -32401,7 +32238,7 @@ ;; - Unknowns -;;(define-extern *sidekick-human-sg* object) ;; unknown type +(define-extern *sidekick-human-sg* skeleton-group) ;; ---------------------- @@ -32580,14 +32417,14 @@ ;; - Unknowns -;;(define-extern *scarecrow-b-sg* object) ;; unknown type -;;(define-extern *scarecrow-b-break-sg* object) ;; unknown type -;;(define-extern *scarecrow-a-sg* object) ;; unknown type -;;(define-extern *scarecrow-a-break-sg* object) ;; unknown type -;;(define-extern *tra-iris-door-sg* object) ;; unknown type -;;(define-extern *tra-pontoon-sg* object) ;; unknown type +(define-extern *scarecrow-b-sg* skeleton-group) +(define-extern *scarecrow-b-break-sg* skeleton-group) +(define-extern *scarecrow-a-sg* skeleton-group) +(define-extern *scarecrow-a-break-sg* skeleton-group) +(define-extern *tra-iris-door-sg* skeleton-group) +(define-extern *tra-pontoon-sg* skeleton-group) ;;(define-extern *tra-pontoon-constants* object) ;; unknown type -;;(define-extern *training-cam-sg* object) ;; unknown type +(define-extern *training-cam-sg* skeleton-group) ;;(define-extern ripple-for-training-water object) ;; unknown type @@ -32938,24 +32775,24 @@ ;;(define-extern boat-fuelcell-spawn object) ;; unknown type ;;(define-extern boat-fuelcell-idle object) ;; unknown type -;;(define-extern *mistycam-sg* object) ;; unknown type +(define-extern *mistycam-sg* skeleton-group) ;;(define-extern boat-fuelcell-die object) ;; unknown type -;;(define-extern *mis-bone-platform-sg* object) ;; unknown type +(define-extern *mis-bone-platform-sg* skeleton-group) ;;(define-extern *bone-platform-constants* object) ;; unknown type -;;(define-extern *breakaway-left-sg* object) ;; unknown type -;;(define-extern *breakaway-mid-sg* object) ;; unknown type -;;(define-extern *breakaway-right-sg* object) ;; unknown type +(define-extern *breakaway-left-sg* skeleton-group) +(define-extern *breakaway-mid-sg* skeleton-group) +(define-extern *breakaway-right-sg* skeleton-group) ;;(define-extern breakaway-idle object) ;; unknown type ;;(define-extern breakaway-fall object) ;; unknown type ;;(define-extern breakaway-about-to-fall object) ;; unknown type -;;(define-extern *mis-bone-bridge-sg* object) ;; unknown type +(define-extern *mis-bone-bridge-sg* skeleton-group) ;;(define-extern mis-bone-bridge-fall object) ;; unknown type ;;(define-extern mis-bone-bridge-idle object) ;; unknown type ;;(define-extern mis-bone-bridge-hit object) ;; unknown type ;;(define-extern mis-bone-bridge-bump object) ;; unknown type -;;(define-extern *windturbine-sg* object) ;; unknown type +(define-extern *windturbine-sg* skeleton-group) ;;(define-extern windturbine-idle object) ;; unknown type -;;(define-extern *boatpaddle-sg* object) ;; unknown type +(define-extern *boatpaddle-sg* skeleton-group) ;;(define-extern boatpaddle-idle object) ;; unknown type @@ -33024,8 +32861,8 @@ ;; - Unknowns -;;(define-extern *rounddoor-sg* object) ;; unknown type -;;(define-extern *silostep-sg* object) ;; unknown type +(define-extern *rounddoor-sg* skeleton-group) +(define-extern *silostep-sg* skeleton-group) ;;(define-extern silostep-rise object) ;; unknown type ;;(define-extern silostep-idle object) ;; unknown type ;;(define-extern silostep-camera object) ;; unknown type @@ -33125,12 +32962,12 @@ ;; - Unknowns -;;(define-extern *keg-conveyor-sg* object) ;; unknown type +(define-extern *keg-conveyor-sg* skeleton-group) ;;(define-extern keg-conveyor-idle object) ;; unknown type -;;(define-extern *keg-conveyor-paddle-sg* object) ;; unknown type +(define-extern *keg-conveyor-paddle-sg* skeleton-group) ;;(define-extern keg-conveyor-paddle-idle object) ;; unknown type ;;(define-extern *keg-conveyor-keg-spawn-table* object) ;; unknown type -;;(define-extern *keg-sg* object) ;; unknown type +(define-extern *keg-sg* skeleton-group) ;;(define-extern keg-on-paddle object) ;; unknown type ;;(define-extern keg-die object) ;; unknown type ;;(define-extern keg-in-chute object) ;; unknown type @@ -33300,8 +33137,8 @@ ;; - Unknowns -;;(define-extern *muse-sg* object) ;; unknown type -;;(define-extern *muse-nav-enemy-info* object) ;; unknown type +(define-extern *muse-sg* skeleton-group) +(define-extern *muse-nav-enemy-info* nav-enemy-info) ;;(define-extern muse-idle object) ;; unknown type ;;(define-extern muse-caught object) ;; unknown type @@ -33401,8 +33238,8 @@ ;; - Unknowns -;;(define-extern *bonelurker-sg* object) ;; unknown type -;;(define-extern *bonelurker-nav-enemy-info* object) ;; unknown type +(define-extern *bonelurker-sg* skeleton-group) +(define-extern *bonelurker-nav-enemy-info* nav-enemy-info) ;;(define-extern bonelurker-stun object) ;; unknown type @@ -33486,7 +33323,7 @@ ;; - Unknowns -;;(define-extern *quicksandlurker-sg* object) ;; unknown type +(define-extern *quicksandlurker-sg* skeleton-group) ;;(define-extern quicksandlurker-idle object) ;; unknown type ;;(define-extern quicksandlurker-track object) ;; unknown type ;;(define-extern quicksandlurker-wait object) ;; unknown type @@ -33538,7 +33375,7 @@ ;; - Unknowns -;;(define-extern *teetertotter-sg* object) ;; unknown type +(define-extern *teetertotter-sg* skeleton-group) ;;(define-extern teetertotter-idle object) ;; unknown type ;;(define-extern teetertotter-launch object) ;; unknown type ;;(define-extern teetertotter-bend object) ;; unknown type @@ -33665,10 +33502,10 @@ ;; - Unknowns ;;(define-extern balloonlurker-patrol object) ;; unknown type -;;(define-extern *balloonlurker-sg* object) ;; unknown type +(define-extern *balloonlurker-sg* skeleton-group) ;;(define-extern *balloonlurker-constants* object) ;; unknown type ;;(define-extern balloonlurker-pilot-idle object) ;; unknown type -;;(define-extern *balloonlurker-pilot-sg* object) ;; unknown type +(define-extern *balloonlurker-pilot-sg* skeleton-group) ;;(define-extern balloonlurker-pilot-die object) ;; unknown type ;;(define-extern *BALLOONLURKER-bank* object) ;; unknown type ;;(define-extern balloonlurker-die object) ;; unknown type @@ -33757,11 +33594,11 @@ ;; - Unknowns -;;(define-extern *darkecocan-sg* object) ;; unknown type -;;(define-extern *darkecocan-glow-sg* object) ;; unknown type +(define-extern *darkecocan-sg* skeleton-group) +(define-extern *darkecocan-glow-sg* skeleton-group) ;;(define-extern *lurker-army* object) ;; unknown type -;;(define-extern *evilbro-sg* object) ;; unknown type -;;(define-extern *evilsis-sg* object) ;; unknown type +(define-extern *evilbro-sg* skeleton-group) +(define-extern *evilsis-sg* skeleton-group) ;; ---------------------- @@ -33859,7 +33696,7 @@ ;; - Unknowns -;;(define-extern *assistant-firecanyon-sg* object) ;; unknown type +(define-extern *assistant-firecanyon-sg* skeleton-group) ;; ---------------------- @@ -34215,31 +34052,31 @@ ;; - Unknowns ;;(define-extern ripple-for-villageb-water object) ;; unknown type -;;(define-extern *ogreboss-village2-sg* object) ;; unknown type +(define-extern *ogreboss-village2-sg* skeleton-group) ;;(define-extern ogreboss-village2-idle object) ;; unknown type ;;(define-extern ogreboss-village2-throw object) ;; unknown type -;;(define-extern *fireboulder-sg* object) ;; unknown type -;;(define-extern *exit-chamber-dummy-sg* object) ;; unknown type +(define-extern *fireboulder-sg* skeleton-group) +(define-extern *exit-chamber-dummy-sg* skeleton-group) ;;(define-extern exit-chamber-dummy-wait-to-appear object) ;; unknown type ;;(define-extern exit-chamber-dummy-idle object) ;; unknown type -;;(define-extern *ceilingflag-sg* object) ;; unknown type +(define-extern *ceilingflag-sg* skeleton-group) ;;(define-extern ceilingflag-idle object) ;; unknown type ;;(define-extern fireboulder-idle object) ;; unknown type ;;(define-extern fireboulder-hover object) ;; unknown type ;;(define-extern fireboulder-be-clone object) ;; unknown type -;;(define-extern *allpontoons-sg* object) ;; unknown type +(define-extern *allpontoons-sg* skeleton-group) ;;(define-extern allpontoons-idle object) ;; unknown type ;;(define-extern allpontoons-be-clone object) ;; unknown type -;;(define-extern *pontoonten-sg* object) ;; unknown type +(define-extern *pontoonten-sg* skeleton-group) ;;(define-extern *pontoonten-constants* object) ;; unknown type -;;(define-extern *pontoonfive-sg* object) ;; unknown type +(define-extern *pontoonfive-sg* skeleton-group) ;;(define-extern *pontoonfive-constants* object) ;; unknown type ;;(define-extern pontoon-die object) ;; unknown type ;;(define-extern pontoon-hidden object) ;; unknown type -;;(define-extern *village2cam-sg* object) ;; unknown type -;;(define-extern *med-res-rolling-sg* object) ;; unknown type -;;(define-extern *med-res-rolling1-sg* object) ;; unknown type -;;(define-extern *med-res-village2-sg* object) ;; unknown type +(define-extern *village2cam-sg* skeleton-group) +(define-extern *med-res-rolling-sg* skeleton-group) +(define-extern *med-res-rolling1-sg* skeleton-group) +(define-extern *med-res-village2-sg* skeleton-group) ;; ---------------------- @@ -34315,7 +34152,7 @@ ;; - Unknowns -;;(define-extern *gambler-sg* object) ;; unknown type +(define-extern *gambler-sg* skeleton-group) ;; ---------------------- @@ -34382,7 +34219,7 @@ ;; - Unknowns -;;(define-extern *warrior-sg* object) ;; unknown type +(define-extern *warrior-sg* skeleton-group) ;; ---------------------- @@ -34449,7 +34286,7 @@ ;; - Unknowns -;;(define-extern *geologist-sg* object) ;; unknown type +(define-extern *geologist-sg* skeleton-group) ;; ---------------------- @@ -34692,24 +34529,24 @@ ;; - Unknowns -;;(define-extern *swamp-blimp-sg* object) ;; unknown type +(define-extern *swamp-blimp-sg* skeleton-group) ;;(define-extern swamp-blimp-idle object) ;; unknown type ;;(define-extern swamp-blimp-bye-bye object) ;; unknown type ;;(define-extern *SWAMP_BLIMP-bank* object) ;; unknown type -;;(define-extern *swamp-rope-sg* object) ;; unknown type +(define-extern *swamp-rope-sg* skeleton-group) ;;(define-extern swamp-rope-idle-rock object) ;; unknown type ;;(define-extern swamp-rope-idle-arm object) ;; unknown type ;;(define-extern swamp-rope-break object) ;; unknown type -;;(define-extern *precursor-arm-sg* object) ;; unknown type +(define-extern *precursor-arm-sg* skeleton-group) ;;(define-extern precursor-arm-idle object) ;; unknown type ;;(define-extern precursor-arm-die object) ;; unknown type ;;(define-extern precursor-arm-sink object) ;; unknown type -;;(define-extern *swamp-tetherrock-sg* object) ;; unknown type +(define-extern *swamp-tetherrock-sg* skeleton-group) ;;(define-extern swamp-tetherrock-die object) ;; unknown type ;;(define-extern swamp-tetherrock-hide object) ;; unknown type ;;(define-extern swamp-tetherrock-idle object) ;; unknown type ;;(define-extern swamp-tetherrock-break object) ;; unknown type -;;(define-extern *swamp-tetherrock-explode-sg* object) ;; unknown type +(define-extern *swamp-tetherrock-explode-sg* skeleton-group) ;; ---------------------- @@ -34836,7 +34673,7 @@ ;; - Unknowns -;;(define-extern *sage-bluehut-sg* object) ;; unknown type +(define-extern *sage-bluehut-sg* skeleton-group) ;; ---------------------- @@ -34903,7 +34740,7 @@ ;; - Unknowns -;;(define-extern *flutflut-bluehut-sg* object) ;; unknown type +(define-extern *flutflut-bluehut-sg* skeleton-group) ;; ---------------------- @@ -34978,9 +34815,9 @@ ;; - Unknowns -;;(define-extern *assistant-village2-sg* object) ;; unknown type +(define-extern *assistant-village2-sg* skeleton-group) ;;(define-extern just-particles object) ;; unknown type -;;(define-extern *jaws-sg* object) ;; unknown type +(define-extern *jaws-sg* skeleton-group) ;; ---------------------- @@ -35030,7 +34867,7 @@ ;; - Unknowns -;;(define-extern *sunken-elevator-sg* object) ;; unknown type +(define-extern *sunken-elevator-sg* skeleton-group) ;; ---------------------- @@ -35285,18 +35122,18 @@ ;; - Unknowns -;;(define-extern *swampcam-sg* object) ;; unknown type -;;(define-extern *tar-plat-sg* object) ;; unknown type +(define-extern *swampcam-sg* skeleton-group) +(define-extern *tar-plat-sg* skeleton-group) ;;(define-extern *tar-plat-constants* object) ;; unknown type -;;(define-extern *swamp-rock-sg* object) ;; unknown type +(define-extern *swamp-rock-sg* skeleton-group) ;;(define-extern swamp-rock-idle object) ;; unknown type ;;(define-extern swamp-rock-break object) ;; unknown type -;;(define-extern *balance-plat-sg* object) ;; unknown type +(define-extern *balance-plat-sg* skeleton-group) ;;(define-extern balance-plat-idle object) ;; unknown type ;;(define-extern swamp-spike-gate-down object) ;; unknown type ;;(define-extern swamp-spike-gate-up object) ;; unknown type ;;(define-extern swamp-spike-idle object) ;; unknown type -;;(define-extern *swamp-spike-sg* object) ;; unknown type +(define-extern *swamp-spike-sg* skeleton-group) ;; ---------------------- @@ -35398,7 +35235,7 @@ ;;(define-extern swamp-bat-idle object) ;; unknown type ;;(define-extern swamp-bat-launch-slaves object) ;; unknown type -;;(define-extern *swamp-bat-slave-sg* object) ;; unknown type +(define-extern *swamp-bat-slave-sg* skeleton-group) ;;(define-extern swamp-bat-slave-idle object) ;; unknown type ;;(define-extern swamp-bat-slave-return object) ;; unknown type ;;(define-extern swamp-bat-slave-strafe object) ;; unknown type @@ -35415,93 +35252,33 @@ ;; - Types -; (deftype swamp-rat (nav-enemy) -; ((up-vector vector :inline :offset-assert 400) -; (state-float float :offset-assert 416) -; (state-vector vector :inline :offset-assert 432) -; (free-time uint64 :offset-assert 360) -; (wiggle-time uint64 :offset-assert 456) -; (wiggle-angle float :offset-assert 464) -; (delta-wiggle-angle float :offset-assert 468) -; (wiggle-factor float :offset-assert 472) -; (min-height float :offset-assert 476) -; (chase-rest-time uint64 :offset-assert 480) -; (target-nav-time uint64 :offset-assert 488) -; ) -; :method-count-assert 76 -; :size-assert #x1f0 -; :flag-assert #x4c018001f0 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype swamp-rat (nav-enemy) + ((up-vector vector :inline :offset-assert 400) + (state-float float :offset-assert 416) + (state-vector vector :inline :offset-assert 432) + ;(free-time uint64 :offset-assert 360) + (_hack uint64 :offset-assert 448) + (wiggle-time uint64 :offset-assert 456) + (wiggle-angle float :offset-assert 464) + (delta-wiggle-angle float :offset-assert 468) + (wiggle-factor float :offset-assert 472) + (min-height float :offset-assert 476) + (chase-rest-time uint64 :offset-assert 480) + (target-nav-time uint64 :offset-assert 488) + ) + :method-count-assert 76 + :size-assert #x1f0 + :heap-base #x180 + :flag-assert #x4c018001f0 + ;; inherited inspect of nav-enemy + (:methods + (nav-enemy-chase () none 21) + (nav-enemy-die () none 23) + (nav-enemy-idle () none 28) + (nav-enemy-stare () none 31) + (nav-enemy-victory () none 33) + ) + ) ;; - Functions @@ -35513,8 +35290,8 @@ ;; - Unknowns ;;(define-extern swamp-rat-spawn object) ;; unknown type -;;(define-extern *swamp-rat-sg* object) ;; unknown type -;;(define-extern *swamp-rat-nav-enemy-info* object) ;; unknown type +(define-extern *swamp-rat-sg* skeleton-group) +(define-extern *swamp-rat-nav-enemy-info* nav-enemy-info) ;;(define-extern pointer object) ;; unknown type @@ -35667,9 +35444,9 @@ ;; - Unknowns -;;(define-extern *swamp-rat-nest-dummy-c-sg* object) ;; unknown type -;;(define-extern *swamp-rat-nest-dummy-b-sg* object) ;; unknown type -;;(define-extern *swamp-rat-nest-dummy-a-sg* object) ;; unknown type +(define-extern *swamp-rat-nest-dummy-c-sg* skeleton-group) +(define-extern *swamp-rat-nest-dummy-b-sg* skeleton-group) +(define-extern *swamp-rat-nest-dummy-a-sg* skeleton-group) ;;(define-extern swamp-rat-nest-idle object) ;; unknown type ;;(define-extern swamp-rat-nest-active object) ;; unknown type ;;(define-extern swamp-rat-nest-gestate object) ;; unknown type @@ -35839,8 +35616,8 @@ ;; - Unknowns -;;(define-extern *kermit-sg* object) ;; unknown type -;;(define-extern *kermit-nav-enemy-info* object) ;; unknown type +(define-extern *kermit-sg* skeleton-group) +(define-extern *kermit-nav-enemy-info* nav-enemy-info) ;;(define-extern kermit-idle object) ;; unknown type ;;(define-extern kermit-chase object) ;; unknown type ;;(define-extern kermit-retract-tongue object) ;; unknown type @@ -36075,11 +35852,11 @@ ;; - Unknowns -;;(define-extern *billy-sg* object) ;; unknown type -;;(define-extern *billy-sidekick-sg* object) ;; unknown type +(define-extern *billy-sg* skeleton-group) +(define-extern *billy-sidekick-sg* skeleton-group) ;;(define-extern billy-playing object) ;; unknown type ;;(define-extern billy-done object) ;; unknown type -;;(define-extern *farthy-snack-sg* object) ;; unknown type +(define-extern *farthy-snack-sg* skeleton-group) ;;(define-extern billy-rat-salivate object) ;; unknown type ;;(define-extern billy-rat-eat object) ;; unknown type ;;(define-extern billy-snack-idle object) ;; unknown type @@ -36363,23 +36140,23 @@ ;; - Unknowns -;;(define-extern *caveelevator-sg* object) ;; unknown type +(define-extern *caveelevator-sg* skeleton-group) ;;(define-extern caveelevator-cycle-active object) ;; unknown type ;;(define-extern caveelevator-one-way-idle-start object) ;; unknown type ;;(define-extern caveelevator-one-way-travel-to-start object) ;; unknown type ;;(define-extern caveelevator-one-way-idle-end object) ;; unknown type ;;(define-extern caveelevator-one-way-travel-to-end object) ;; unknown type -;;(define-extern *cavespatulatwo-sg* object) ;; unknown type +(define-extern *cavespatulatwo-sg* skeleton-group) ;;(define-extern cavespatulatwo-idle object) ;; unknown type -;;(define-extern *cavespatula-darkcave-sg* object) ;; unknown type -;;(define-extern *cavespatula-sg* object) ;; unknown type +(define-extern *cavespatula-darkcave-sg* skeleton-group) +(define-extern *cavespatula-sg* skeleton-group) ;;(define-extern cavespatula-idle object) ;; unknown type ;;(define-extern caveflamepots-active object) ;; unknown type -;;(define-extern *cavetrapdoor-sg* object) ;; unknown type -;;(define-extern *cavecrusher-sg* object) ;; unknown type +(define-extern *cavetrapdoor-sg* skeleton-group) +(define-extern *cavecrusher-sg* skeleton-group) ;;(define-extern cavecrusher-idle object) ;; unknown type ;;(define-extern ripple-for-cave-water object) ;; unknown type -;;(define-extern *maincavecam-sg* object) ;; unknown type +(define-extern *maincavecam-sg* skeleton-group) ;; ---------------------- @@ -36475,7 +36252,7 @@ ;; - Unknowns -;;(define-extern *spiderwebs-sg* object) ;; unknown type +(define-extern *spiderwebs-sg* skeleton-group) ;;(define-extern spiderwebs-idle object) ;; unknown type ;;(define-extern *spider-jump-mods* object) ;; unknown type ;;(define-extern spiderwebs-bounce object) ;; unknown type @@ -36521,10 +36298,10 @@ ;; - Unknowns -;;(define-extern *dark-crystal-sg* object) ;; unknown type +(define-extern *dark-crystal-sg* skeleton-group) ;;(define-extern dark-crystal-spawn-fuel-cell object) ;; unknown type ;;(define-extern dark-crystal-idle object) ;; unknown type -;;(define-extern *dark-crystal-explode-sg* object) ;; unknown type +(define-extern *dark-crystal-explode-sg* skeleton-group) ;;(define-extern *dark-crystal-exploder-params* object) ;; unknown type ;;(define-extern *dark-crystal-flash-delays* object) ;; unknown type ;;(define-extern dark-crystal-explode object) ;; unknown type @@ -36659,9 +36436,9 @@ ;;(define-extern baby-spider-hatching object) ;; unknown type ;;(define-extern baby-spider-resume object) ;; unknown type -;;(define-extern *baby-spider-sg* object) ;; unknown type +(define-extern *baby-spider-sg* skeleton-group) ;;(define-extern *baby-spider-nav-enemy-info-for-cave-trap* object) ;; unknown type -;;(define-extern *baby-spider-nav-enemy-info* object) ;; unknown type +(define-extern *baby-spider-nav-enemy-info* nav-enemy-info) ;;(define-extern baby-spider-die-fast object) ;; unknown type @@ -36857,8 +36634,8 @@ ;; - Unknowns -;;(define-extern *mother-spider-egg-unbroken-sg* object) ;; unknown type -;;(define-extern *mother-spider-egg-broken-sg* object) ;; unknown type +(define-extern *mother-spider-egg-unbroken-sg* skeleton-group) +(define-extern *mother-spider-egg-broken-sg* skeleton-group) ;;(define-extern mother-spider-egg-falling object) ;; unknown type ;;(define-extern mother-spider-egg-die-exit object) ;; unknown type ;;(define-extern mother-spider-egg-hatch object) ;; unknown type @@ -36926,7 +36703,7 @@ ;; - Unknowns -;;(define-extern *mother-spider-sg* object) ;; unknown type +(define-extern *mother-spider-sg* skeleton-group) ;;(define-extern mother-spider-die-wait-for-children object) ;; unknown type ;;(define-extern mother-spider-idle object) ;; unknown type ;;(define-extern *mother-spider-threads* object) ;; unknown type @@ -36941,7 +36718,7 @@ ;;(define-extern mother-spider-stop-traveling object) ;; unknown type ;;(define-extern mother-spider-die-from-uppercut object) ;; unknown type ;;(define-extern mother-spider-die object) ;; unknown type -;;(define-extern *mother-spider-leg-sg* object) ;; unknown type +(define-extern *mother-spider-leg-sg* skeleton-group) ;;(define-extern mother-spider-leg-flying object) ;; unknown type ;;(define-extern wait-for-children object) ;; unknown type @@ -37073,7 +36850,7 @@ ;; - Unknowns -;;(define-extern *gnawer-sg* object) ;; unknown type +(define-extern *gnawer-sg* skeleton-group) ;;(define-extern gnawer-put-items-at-dest object) ;; unknown type ;;(define-extern gnawer-chewing-on-post object) ;; unknown type ;;(define-extern *gnawer-segment-infos* object) ;; unknown type @@ -37083,7 +36860,7 @@ ;;(define-extern gnawer-die object) ;; unknown type ;;(define-extern gnawer-run object) ;; unknown type ;;(define-extern gnawer-retreat-into-post object) ;; unknown type -;;(define-extern *gnawer-segment-sg* object) ;; unknown type +(define-extern *gnawer-segment-sg* skeleton-group) ;; ---------------------- @@ -37153,7 +36930,7 @@ ;; - Unknowns -;;(define-extern *driller-lurker-sg* object) ;; unknown type +(define-extern *driller-lurker-sg* skeleton-group) ;;(define-extern *driller-lurker-shadow-control* object) ;; unknown type ;;(define-extern driller-lurker-idle-drilling object) ;; unknown type ;;(define-extern driller-lurker-patrol object) ;; unknown type @@ -37464,11 +37241,11 @@ ;; - Unknowns -;;(define-extern *seaweed-sg* object) ;; unknown type +(define-extern *seaweed-sg* skeleton-group) ;;(define-extern *seaweed* object) ;; unknown type ;;(define-extern seaweed-idle object) ;; unknown type -;;(define-extern *side-to-side-plat-sg* object) ;; unknown type -;;(define-extern *sunkencam-sg* object) ;; unknown type +(define-extern *side-to-side-plat-sg* skeleton-group) +(define-extern *sunkencam-sg* skeleton-group) ;; ---------------------- @@ -37503,7 +37280,7 @@ ;; - Unknowns -;;(define-extern *shover-sg* object) ;; unknown type +(define-extern *shover-sg* skeleton-group) ;;(define-extern *shover* object) ;; unknown type ;;(define-extern shover-idle object) ;; unknown type @@ -37622,7 +37399,7 @@ ;;(define-extern square-platform-master-idle object) ;; unknown type ;;(define-extern square-platform-master-activate object) ;; unknown type -;;(define-extern *square-platform-sg* object) ;; unknown type +(define-extern *square-platform-sg* skeleton-group) ;;(define-extern square-platform-lowered object) ;; unknown type ;;(define-extern square-platform-rising object) ;; unknown type ;;(define-extern square-platform-lowering object) ;; unknown type @@ -37637,38 +37414,28 @@ ;; - Types -; (deftype sun-iris-door (process-drawable) -; ((timeout float :offset-assert 176) -; (proximity? basic :offset-assert 180) -; (directional-proximity? basic :offset-assert 184) -; (move-to? basic :offset-assert 188) -; (locked-by-task? basic :offset-assert 192) -; (close-dist float :offset-assert 196) -; (open-dist float :offset-assert 200) -; (move-to-pos vector :inline :offset-assert 208) -; (outward-vec vector :inline :offset-assert 224) -; (move-to-quat quaternion :inline :offset-assert 240) -; ) -; :method-count-assert 22 -; :size-assert #x100 -; :flag-assert #x1600900100 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype sun-iris-door (process-drawable) + ((timeout float :offset-assert 176) + (proximity? basic :offset-assert 180) + (directional-proximity? basic :offset-assert 184) + (move-to? basic :offset-assert 188) + (locked-by-task? basic :offset-assert 192) + (close-dist float :offset-assert 196) + (open-dist float :offset-assert 200) + (move-to-pos vector :inline :offset-assert 208) + (outward-vec vector :inline :offset-assert 224) + (move-to-quat quaternion :inline :offset-assert 240) + ) + :method-count-assert 22 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x1600900100 + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Functions @@ -37676,11 +37443,11 @@ ;; - Unknowns -;;(define-extern *sun-iris-door-sg* object) ;; unknown type -;;(define-extern sun-iris-door-open object) ;; unknown type -;;(define-extern sun-iris-door-closed object) ;; unknown type -;;(define-extern sun-iris-door-opening object) ;; unknown type -;;(define-extern sun-iris-door-closing object) ;; unknown type +(define-extern *sun-iris-door-sg* skeleton-group) +(define-extern sun-iris-door-open state) +(define-extern sun-iris-door-closed state) +(define-extern sun-iris-door-opening state) +(define-extern sun-iris-door-closing state) ;; ---------------------- @@ -37759,14 +37526,14 @@ ;; - Unknowns -;;(define-extern *orbit-plat-sg* object) ;; unknown type +(define-extern *orbit-plat-sg* skeleton-group) ;;(define-extern orbit-plat-wait-for-other object) ;; unknown type ;;(define-extern orbit-plat-idle object) ;; unknown type ;;(define-extern orbit-plat-riding object) ;; unknown type ;;(define-extern orbit-plat-rotating object) ;; unknown type ;;(define-extern orbit-plat-still object) ;; unknown type ;;(define-extern orbit-plat-reset object) ;; unknown type -;;(define-extern *orbit-plat-bottom-sg* object) ;; unknown type +(define-extern *orbit-plat-bottom-sg* skeleton-group) ;;(define-extern orbit-plat-bottom-idle object) ;; unknown type @@ -37860,13 +37627,13 @@ ;; - Unknowns -;;(define-extern *wedge-plat-sg* object) ;; unknown type +(define-extern *wedge-plat-sg* skeleton-group) ;;(define-extern wedge-plat-outer-idle object) ;; unknown type ;;(define-extern wedge-plat-outer-tip object) ;; unknown type ;;(define-extern wedge-plat-idle object) ;; unknown type ;;(define-extern wedge-plat-tip object) ;; unknown type ;;(define-extern wedge-plat-master-idle object) ;; unknown type -;;(define-extern *wedge-plat-outer-sg* object) ;; unknown type +(define-extern *wedge-plat-outer-sg* skeleton-group) ;; ---------------------- @@ -37905,7 +37672,7 @@ ;; - Unknowns -;;(define-extern *wall-plat-sg* object) ;; unknown type +(define-extern *wall-plat-sg* skeleton-group) ;;(define-extern wall-plat-sync-idle object) ;; unknown type ;;(define-extern wall-plat-retracted object) ;; unknown type ;;(define-extern wall-plat-retracting object) ;; unknown type @@ -38027,9 +37794,9 @@ ;;(define-extern qbert-plat-master-idle object) ;; unknown type ;;(define-extern qbert-plat-master-do-door object) ;; unknown type ;;(define-extern qbert-plat-wait-for-master object) ;; unknown type -;;(define-extern *qbert-plat-sg* object) ;; unknown type +(define-extern *qbert-plat-sg* skeleton-group) ;;(define-extern *qbert-plat-constants* object) ;; unknown type -;;(define-extern *qbert-plat-on-sg* object) ;; unknown type +(define-extern *qbert-plat-on-sg* skeleton-group) ;;(define-extern qbert-plat-on-mimic object) ;; unknown type ;;(define-extern qbert-plat-on-die object) ;; unknown type @@ -38087,7 +37854,7 @@ ;; - Unknowns -;;(define-extern *steam-cap-sg* object) ;; unknown type +(define-extern *steam-cap-sg* skeleton-group) ;;(define-extern steam-cap-idle object) ;; unknown type @@ -38239,19 +38006,19 @@ ;; - Unknowns -;;(define-extern *exit-chamber-sg* object) ;; unknown type +(define-extern *exit-chamber-sg* skeleton-group) ;;(define-extern exit-chamber-charger-puzzle object) ;; unknown type ;;(define-extern exit-chamber-idle-in-sunken object) ;; unknown type ;;(define-extern exit-chamber-idle-in-village object) ;; unknown type ;;(define-extern exit-chamber-lower object) ;; unknown type ;;(define-extern exit-chamber-rise object) ;; unknown type ;;(define-extern exit-chamber-charger-puzzle-beaten object) ;; unknown type -;;(define-extern *blue-eco-charger-sg* object) ;; unknown type +(define-extern *blue-eco-charger-sg* skeleton-group) ;;(define-extern blue-eco-charger-idle object) ;; unknown type ;;(define-extern blue-eco-charger-open object) ;; unknown type ;;(define-extern blue-eco-charger-close object) ;; unknown type ;;(define-extern blue-eco-charger-stuck-open object) ;; unknown type -;;(define-extern *blue-eco-charger-orb-sg* object) ;; unknown type +(define-extern *blue-eco-charger-orb-sg* skeleton-group) ;;(define-extern blue-eco-charger-orb-idle object) ;; unknown type ;;(define-extern blue-eco-charger-orb-active object) ;; unknown type @@ -38296,7 +38063,7 @@ ;; - Unknowns -;;(define-extern *floating-launcher-sg* object) ;; unknown type +(define-extern *floating-launcher-sg* skeleton-group) ;;(define-extern floating-launcher-idle object) ;; unknown type ;;(define-extern floating-launcher-ready object) ;; unknown type ;;(define-extern floating-launcher-lowering object) ;; unknown type @@ -38392,7 +38159,7 @@ ;; - Unknowns -;;(define-extern *whirlpool-sg* object) ;; unknown type +(define-extern *whirlpool-sg* skeleton-group) ;;(define-extern whirlpool-idle object) ;; unknown type @@ -38571,14 +38338,14 @@ ;; - Unknowns -;;(define-extern *bully-sg* object) ;; unknown type +(define-extern *bully-sg* skeleton-group) ;;(define-extern *bully-shadow-control* object) ;; unknown type ;;(define-extern bully-idle object) ;; unknown type ;;(define-extern bully-start-spinning object) ;; unknown type ;;(define-extern bully-stop-spinning object) ;; unknown type ;;(define-extern bully-notice object) ;; unknown type ;;(define-extern bully-die object) ;; unknown type -;;(define-extern *bully-broken-cage-sg* object) ;; unknown type +(define-extern *bully-broken-cage-sg* skeleton-group) ;;(define-extern bully-broken-cage-explode object) ;; unknown type @@ -38758,17 +38525,17 @@ ;; - Unknowns ;;(define-extern double-lurker-waiting-to-die object) ;; unknown type -;;(define-extern *double-lurker-sg* object) ;; unknown type -;;(define-extern *double-lurker-when-both-nav-enemy-info* object) ;; unknown type -;;(define-extern *double-lurker-nav-enemy-info* object) ;; unknown type +(define-extern *double-lurker-sg* skeleton-group) +(define-extern *double-lurker-when-both-nav-enemy-info* nav-enemy-info) +(define-extern *double-lurker-nav-enemy-info* nav-enemy-info) ;;(define-extern double-lurker-resume object) ;; unknown type ;;(define-extern double-lurker-break-apart object) ;; unknown type ;;(define-extern double-lurker-buddy-was-hit object) ;; unknown type ;;(define-extern double-lurker-both-knocked-back object) ;; unknown type ;;(define-extern double-lurker-top-on-shoulders object) ;; unknown type ;;(define-extern double-lurker-top-resume object) ;; unknown type -;;(define-extern *double-lurker-top-sg* object) ;; unknown type -;;(define-extern *double-lurker-top-nav-enemy-info* object) ;; unknown type +(define-extern *double-lurker-top-sg* skeleton-group) +(define-extern *double-lurker-top-nav-enemy-info* nav-enemy-info) ;;(define-extern double-lurker-top-knocked-down object) ;; unknown type ;;(define-extern double-lurker-top-on-shoulders-die object) ;; unknown type ;;(define-extern double-lurker-show-anims object) ;; unknown type @@ -38895,14 +38662,14 @@ ;;(define-extern *helix-water* object) ;; unknown type ;;(define-extern helix-water-idle object) ;; unknown type ;;(define-extern helix-water-activated object) ;; unknown type -;;(define-extern *helix-button-sg* object) ;; unknown type +(define-extern *helix-button-sg* skeleton-group) ;;(define-extern *helix-button* object) ;; unknown type ;;(define-extern helix-button-startup object) ;; unknown type ;;(define-extern helix-button-idle-down object) ;; unknown type ;;(define-extern helix-button-quick-activate object) ;; unknown type ;;(define-extern helix-button-activate object) ;; unknown type ;;(define-extern helix-button-idle-up object) ;; unknown type -;;(define-extern *helix-slide-door-sg* object) ;; unknown type +(define-extern *helix-slide-door-sg* skeleton-group) ;;(define-extern *helix-slide-door* object) ;; unknown type ;;(define-extern helix-slide-door-idle-open object) ;; unknown type ;;(define-extern helix-slide-door-idle-closed object) ;; unknown type @@ -38997,8 +38764,8 @@ ;; - Unknowns -;;(define-extern *puffer-sg* object) ;; unknown type -;;(define-extern *puffer-mean-sg* object) ;; unknown type +(define-extern *puffer-sg* skeleton-group) +(define-extern *puffer-mean-sg* skeleton-group) ;;(define-extern puffer-idle object) ;; unknown type ;;(define-extern puffer-patrol object) ;; unknown type ;;(define-extern puffer-attack object) ;; unknown type @@ -39063,9 +38830,9 @@ ;; - Unknowns ;;(define-extern sunkenfisha-idle object) ;; unknown type -;;(define-extern *sunkenfisha-red-yellow-sg* object) ;; unknown type -;;(define-extern *sunkenfisha-yellow-blue-sg* object) ;; unknown type -;;(define-extern *sunkenfisha-yellow-eye-sg* object) ;; unknown type +(define-extern *sunkenfisha-red-yellow-sg* skeleton-group) +(define-extern *sunkenfisha-yellow-blue-sg* skeleton-group) +(define-extern *sunkenfisha-yellow-eye-sg* skeleton-group) ;; ---------------------- @@ -39443,22 +39210,22 @@ ;;(define-extern gorge-start-race-aborted object) ;; unknown type ;;(define-extern gorge-finish-idle object) ;; unknown type ;;(define-extern gorge-abort-idle object) ;; unknown type -;;(define-extern *rolling-start-whole-sg* object) ;; unknown type -;;(define-extern *rolling-start-broken-sg* object) ;; unknown type +(define-extern *rolling-start-whole-sg* skeleton-group) +(define-extern *rolling-start-broken-sg* skeleton-group) ;;(define-extern rolling-start-whole object) ;; unknown type ;;(define-extern rolling-start-break object) ;; unknown type -;;(define-extern *happy-plant-sg* object) ;; unknown type +(define-extern *happy-plant-sg* skeleton-group) ;;(define-extern happy-plant-opened object) ;; unknown type ;;(define-extern happy-plant-init object) ;; unknown type ;;(define-extern happy-plant-opening object) ;; unknown type -;;(define-extern *rollingcam-sg* object) ;; unknown type -;;(define-extern *dark-plant-sg* object) ;; unknown type +(define-extern *rollingcam-sg* skeleton-group) +(define-extern *dark-plant-sg* skeleton-group) ;;(define-extern dark-plant-gone object) ;; unknown type ;;(define-extern dark-plant-startup object) ;; unknown type ;;(define-extern dark-plant-idle object) ;; unknown type ;;(define-extern dark-plant-sprout object) ;; unknown type ;;(define-extern dark-plant-death object) ;; unknown type -;;(define-extern *pusher-sg* object) ;; unknown type +(define-extern *pusher-sg* skeleton-group) ;;(define-extern gorge-pusher-idle object) ;; unknown type ;;(define-extern pusher-idle object) ;; unknown type @@ -39471,113 +39238,50 @@ ;; - Types -; (deftype fleeing-nav-enemy-info (structure) -; ((min-reflect-angle float :offset-assert 0) -; (max-reflect-angle float :offset-assert 4) -; (max-boundary-deflection float :offset-assert 8) -; (deflection-min-dist float :offset-assert 12) -; (deflection-max-dist float :offset-assert 16) -; (reflection-time int32 :offset-assert 20) -; (travel-rotate-speed float :offset-assert 24) -; (blend_interp_angle float :offset-assert 28) -; (min-speed-adjust float :offset-assert 32) -; (max-speed-adjust float :offset-assert 36) -; (speed-adjust-center float :offset-assert 40) -; (speed-adjust-range float :offset-assert 44) -; (abort-notice-distance float :offset-assert 48) -; (min-notice-dist float :offset-assert 52) -; (max-notice-dist float :offset-assert 56) -; (min-stop-chase-dist float :offset-assert 60) -; (max-stop-chase-dist float :offset-assert 64) -; (max-flee-rotation float :offset-assert 68) -; ) -; :method-count-assert 9 -; :size-assert #x48 -; :flag-assert #x900000048 -; ) +(deftype fleeing-nav-enemy-info (structure) + ((min-reflect-angle float :offset-assert 0) + (max-reflect-angle float :offset-assert 4) + (max-boundary-deflection float :offset-assert 8) + (deflection-min-dist float :offset-assert 12) + (deflection-max-dist float :offset-assert 16) + (reflection-time int32 :offset-assert 20) + (travel-rotate-speed float :offset-assert 24) + (blend_interp_angle float :offset-assert 28) + (min-speed-adjust float :offset-assert 32) + (max-speed-adjust float :offset-assert 36) + (speed-adjust-center float :offset-assert 40) + (speed-adjust-range float :offset-assert 44) + (abort-notice-distance float :offset-assert 48) + (min-notice-dist float :offset-assert 52) + (max-notice-dist float :offset-assert 56) + (min-stop-chase-dist float :offset-assert 60) + (max-stop-chase-dist float :offset-assert 64) + (max-flee-rotation float :offset-assert 68) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x48 + :flag-assert #x900000048 + ) -; (deftype fleeing-nav-enemy (nav-enemy) -; ((last-reflection-time uint64 :offset-assert 400) -; (run-blend-interp float :offset-assert 408) -; (desired-travel vector :inline :offset-assert 416) -; (saved-travel vector :inline :offset-assert 432) -; (speed-adjust float :offset-assert 448) -; (flee-info fleeing-nav-enemy-info :inline :offset-assert 452) -; ) -; :method-count-assert 76 -; :size-assert #x20c -; :flag-assert #x4c01a0020c -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype fleeing-nav-enemy (nav-enemy) + ((last-reflection-time uint64 :offset-assert 400) + (run-blend-interp float :offset-assert 408) + (desired-travel vector :inline :offset-assert 416) + (saved-travel vector :inline :offset-assert 432) + (speed-adjust float :offset-assert 448) + (flee-info fleeing-nav-enemy-info :inline :offset-assert 452) + ) + :method-count-assert 76 + :size-assert #x20c + :heap-base #x1a0 + :flag-assert #x4c01a0020c + ;; inherited inspect of nav-enemy + (:methods + (nav-enemy-chase () none 21) + (nav-enemy-stop-chase () none 32) + ) + ) ; (deftype lightning-mole (fleeing-nav-enemy) ; ((debug-vector vector :inline :offset-assert 528) @@ -39696,12 +39400,12 @@ ;; - Unknowns -;;(define-extern *lightning-mole-sg* object) ;; unknown type +(define-extern *lightning-mole-sg* skeleton-group) ;;(define-extern peeper-up object) ;; unknown type ;;(define-extern peeper-down object) ;; unknown type ;;(define-extern peeper-hide object) ;; unknown type ;;(define-extern peeper-wait object) ;; unknown type -;;(define-extern *lightning-mole-nav-enemy-info* object) ;; unknown type +(define-extern *lightning-mole-nav-enemy-info* nav-enemy-info) ;;(define-extern lightning-mole-gone object) ;; unknown type ;;(define-extern lightning-mole-hiding object) ;; unknown type ;;(define-extern lightning-mole-yelp object) ;; unknown type @@ -39769,7 +39473,7 @@ ;; - Unknowns -;;(define-extern *robber-sg* object) ;; unknown type +(define-extern *robber-sg* skeleton-group) ;;(define-extern robber-die object) ;; unknown type ;;(define-extern robber-dead object) ;; unknown type ;;(define-extern robber-initial object) ;; unknown type @@ -39829,7 +39533,7 @@ ;; - Unknowns -;;(define-extern *race-ring-sg* object) ;; unknown type +(define-extern *race-ring-sg* skeleton-group) ;;(define-extern race-ring-active object) ;; unknown type ;;(define-extern race-ring-wait object) ;; unknown type ;;(define-extern race-ring-idle object) ;; unknown type @@ -39911,8 +39615,8 @@ ;; - Unknowns -;;(define-extern *crate-darkeco-cluster-sg* object) ;; unknown type -;;(define-extern *spike-sg* object) ;; unknown type +(define-extern *crate-darkeco-cluster-sg* skeleton-group) +(define-extern *spike-sg* skeleton-group) ;;(define-extern spike-down object) ;; unknown type ;;(define-extern spike-idle object) ;; unknown type ;;(define-extern spike-up object) ;; unknown type @@ -40021,7 +39725,7 @@ ;; - Unknowns -;;(define-extern *ogreboss-sg* object) ;; unknown type +(define-extern *ogreboss-sg* skeleton-group) ;;(define-extern *ogreboss* object) ;; unknown type ;;(define-extern ogreboss-dead object) ;; unknown type ;;(define-extern ogreboss-idle object) ;; unknown type @@ -40031,13 +39735,13 @@ ;;(define-extern ogreboss-stage3-shuffle object) ;; unknown type ;;(define-extern ogreboss-stage3-hit object) ;; unknown type ;;(define-extern ogreboss-stage2 object) ;; unknown type -;;(define-extern *ogreboss-cam-sg* object) ;; unknown type +(define-extern *ogreboss-cam-sg* skeleton-group) ;;(define-extern ogreboss-wait-for-player object) ;; unknown type ;;(define-extern ogreboss-intro object) ;; unknown type -;;(define-extern *ogreboss-column-sg* object) ;; unknown type -;;(define-extern *ogreboss-bounce-boulder-sg* object) ;; unknown type +(define-extern *ogreboss-column-sg* skeleton-group) +(define-extern *ogreboss-bounce-boulder-sg* skeleton-group) ;;(define-extern ogreboss-bounce-boulder-idle object) ;; unknown type -;;(define-extern *ogreboss-super-boulder-sg* object) ;; unknown type +(define-extern *ogreboss-super-boulder-sg* skeleton-group) ;;(define-extern ogreboss-super-boulder-idle object) ;; unknown type ;;(define-extern ogreboss-super-boulder-roll object) ;; unknown type ;;(define-extern ogreboss-super-boulder-land object) ;; unknown type @@ -40045,10 +39749,10 @@ ;;(define-extern ogreboss-super-boulder-hit object) ;; unknown type ;;(define-extern ogreboss-super-boulder-die object) ;; unknown type ;;(define-extern ogreboss-super-boulder-killed-player object) ;; unknown type -;;(define-extern *ogreboss-shoot-boulder-sg* object) ;; unknown type +(define-extern *ogreboss-shoot-boulder-sg* skeleton-group) ;;(define-extern *ogreboss-missile-shadow-control* object) ;; unknown type ;;(define-extern ogreboss-missile-idle object) ;; unknown type -;;(define-extern *ogreboss-shoot-boulder-break-sg* object) ;; unknown type +(define-extern *ogreboss-shoot-boulder-break-sg* skeleton-group) ;;(define-extern ogreboss-missile-impact object) ;; unknown type ;;(define-extern *ogreboss-shadow-control* object) ;; unknown type ;;(define-extern ogreboss-missile-seek object) ;; unknown type @@ -40556,30 +40260,30 @@ ;; - Unknowns -;;(define-extern *shortcut-boulder-whole-sg* object) ;; unknown type -;;(define-extern *shortcut-boulder-broken-sg* object) ;; unknown type +(define-extern *shortcut-boulder-whole-sg* skeleton-group) +(define-extern *shortcut-boulder-broken-sg* skeleton-group) ;;(define-extern shortcut-boulder-idle object) ;; unknown type ;;(define-extern shortcut-boulder-break object) ;; unknown type ;;(define-extern ripple-for-ogre-lava object) ;; unknown type -;;(define-extern *ogre-bridgeend-sg* object) ;; unknown type +(define-extern *ogre-bridgeend-sg* skeleton-group) ;;(define-extern ogre-bridgeend-idle object) ;; unknown type -;;(define-extern *ogre-bridge-sg* object) ;; unknown type +(define-extern *ogre-bridge-sg* skeleton-group) ;;(define-extern *ogre-bridge-joint-array* object) ;; unknown type ;;(define-extern ogre-bridge-activated object) ;; unknown type ;;(define-extern ogre-bridge-idle object) ;; unknown type ;;(define-extern ogre-bridge-break object) ;; unknown type ;;(define-extern ogre-bridge-activate object) ;; unknown type -;;(define-extern *ogre-isle-d-sg* object) ;; unknown type -;;(define-extern *ogre-isle-b-sg* object) ;; unknown type +(define-extern *ogre-isle-d-sg* skeleton-group) +(define-extern *ogre-isle-b-sg* skeleton-group) ;;(define-extern *ogre-isle-constants* object) ;; unknown type -;;(define-extern *ogre-step-b-sg* object) ;; unknown type -;;(define-extern *ogre-step-c-sg* object) ;; unknown type -;;(define-extern *ogre-step-a-sg* object) ;; unknown type +(define-extern *ogre-step-b-sg* skeleton-group) +(define-extern *ogre-step-c-sg* skeleton-group) +(define-extern *ogre-step-a-sg* skeleton-group) ;;(define-extern *ogre-step-constants* object) ;; unknown type -;;(define-extern *tntbarrel-sg* object) ;; unknown type -;;(define-extern *med-res-snow-sg* object) ;; unknown type -;;(define-extern *ogre-isle-a-sg* object) ;; unknown type -;;(define-extern *ogre-isle-c-sg* object) ;; unknown type +(define-extern *tntbarrel-sg* skeleton-group) +(define-extern *med-res-snow-sg* skeleton-group) +(define-extern *ogre-isle-a-sg* skeleton-group) +(define-extern *ogre-isle-c-sg* skeleton-group) ;; ---------------------- @@ -40668,15 +40372,15 @@ ;; - Unknowns -;;(define-extern *flying-lurker-sg* object) ;; unknown type +(define-extern *flying-lurker-sg* skeleton-group) ;;(define-extern flying-lurker-die object) ;; unknown type ;;(define-extern flying-lurker-idle object) ;; unknown type ;;(define-extern flying-lurker-start object) ;; unknown type ;;(define-extern flying-lurker-clone object) ;; unknown type ;;(define-extern flying-lurker-sleep object) ;; unknown type -;;(define-extern *ogrecam-sg* object) ;; unknown type +(define-extern *ogrecam-sg* skeleton-group) ;;(define-extern flying-lurker-fly object) ;; unknown type -;;(define-extern *plunger-lurker-sg* object) ;; unknown type +(define-extern *plunger-lurker-sg* skeleton-group) ;;(define-extern plunger-lurker-die object) ;; unknown type ;;(define-extern plunger-lurker-idle object) ;; unknown type ;;(define-extern plunger-lurker-flee object) ;; unknown type @@ -40812,14 +40516,14 @@ ;; - Unknowns -;;(define-extern *gondolacables-sg* object) ;; unknown type -;;(define-extern *pistons-sg* object) ;; unknown type -;;(define-extern *gondola-sg* object) ;; unknown type +(define-extern *gondolacables-sg* skeleton-group) +(define-extern *pistons-sg* skeleton-group) +(define-extern *gondola-sg* skeleton-group) ;;(define-extern ripple-for-villagec-lava object) ;; unknown type -;;(define-extern *med-res-ogre-sg* object) ;; unknown type -;;(define-extern *med-res-ogre2-sg* object) ;; unknown type -;;(define-extern *med-res-ogre3-sg* object) ;; unknown type -;;(define-extern *med-res-finalboss-sg* object) ;; unknown type +(define-extern *med-res-ogre-sg* skeleton-group) +(define-extern *med-res-ogre2-sg* skeleton-group) +(define-extern *med-res-ogre3-sg* skeleton-group) +(define-extern *med-res-finalboss-sg* skeleton-group) ;; ---------------------- @@ -40861,7 +40565,7 @@ ;; - Unknowns -;;(define-extern *minecartsteel-sg* object) ;; unknown type +(define-extern *minecartsteel-sg* skeleton-group) ;; ---------------------- @@ -41010,9 +40714,9 @@ ;; - Unknowns -;;(define-extern *cavegem-sg* object) ;; unknown type -;;(define-extern *minershort-sg* object) ;; unknown type -;;(define-extern *minertall-sg* object) ;; unknown type +(define-extern *cavegem-sg* skeleton-group) +(define-extern *minershort-sg* skeleton-group) +(define-extern *minertall-sg* skeleton-group) ;; ---------------------- @@ -41079,7 +40783,7 @@ ;; - Unknowns -;;(define-extern *assistant-village3-sg* object) ;; unknown type +(define-extern *assistant-village3-sg* skeleton-group) ;; ---------------------- @@ -41149,9 +40853,9 @@ ;; - Unknowns -;;(define-extern *sage-village3-sg* object) ;; unknown type -;;(define-extern *evilbro-village3-sg* object) ;; unknown type -;;(define-extern *evilsis-village3-sg* object) ;; unknown type +(define-extern *sage-village3-sg* skeleton-group) +(define-extern *evilbro-village3-sg* skeleton-group) +(define-extern *evilsis-village3-sg* skeleton-group) ;; ---------------------- @@ -41273,8 +40977,8 @@ ;; - Unknowns -;;(define-extern *spider-egg-unbroken-sg* object) ;; unknown type -;;(define-extern *spider-egg-broken-sg* object) ;; unknown type +(define-extern *spider-egg-unbroken-sg* skeleton-group) +(define-extern *spider-egg-broken-sg* skeleton-group) ;;(define-extern spider-egg-idle object) ;; unknown type ;;(define-extern spider-egg-hatch object) ;; unknown type ;;(define-extern spider-egg-die object) ;; unknown type @@ -41460,7 +41164,7 @@ ;; - Unknowns -;;(define-extern *ice-cube-break-sg* object) ;; unknown type +(define-extern *ice-cube-break-sg* skeleton-group) ;;(define-extern ice-cube-face-player object) ;; unknown type ;;(define-extern ice-cube-tired object) ;; unknown type ;;(define-extern ice-cube-retract-spikes object) ;; unknown type @@ -41470,8 +41174,8 @@ ;;(define-extern ice-cube-appear-land object) ;; unknown type ;;(define-extern ice-cube-appear object) ;; unknown type ;;(define-extern ice-cube-trying-to-appear object) ;; unknown type -;;(define-extern *ice-cube-sg* object) ;; unknown type -;;(define-extern *ice-cube-nav-enemy-info* object) ;; unknown type +(define-extern *ice-cube-sg* skeleton-group) +(define-extern *ice-cube-nav-enemy-info* nav-enemy-info) ;;(define-extern ice-cube-shatter object) ;; unknown type ;;(define-extern ice-cube-mean-charge object) ;; unknown type @@ -41593,9 +41297,9 @@ ;; - Unknowns ;;(define-extern snow-ball-idle object) ;; unknown type -;;(define-extern *snow-ball-sg* object) ;; unknown type +(define-extern *snow-ball-sg* skeleton-group) ;;(define-extern snow-ball-roller-idle object) ;; unknown type -;;(define-extern *snow-ball-shadow-sg* object) ;; unknown type +(define-extern *snow-ball-shadow-sg* skeleton-group) ;;(define-extern *snow-ball-shadow-control* object) ;; unknown type ;;(define-extern snow-ball-shadow-idle object) ;; unknown type @@ -41841,33 +41545,33 @@ ;; - Unknowns -;;(define-extern *snow-switch-sg* object) ;; unknown type +(define-extern *snow-switch-sg* skeleton-group) ;;(define-extern snow-log-button-idle-down object) ;; unknown type ;;(define-extern snow-log-button-idle-up object) ;; unknown type ;;(define-extern snow-log-button-activate object) ;; unknown type -;;(define-extern *snow-log-sg* object) ;; unknown type +(define-extern *snow-log-sg* skeleton-group) ;;(define-extern snow-log-wait-for-master object) ;; unknown type ;;(define-extern snow-log-active object) ;; unknown type ;;(define-extern snow-log-activate object) ;; unknown type ;;(define-extern snow-log-hidden object) ;; unknown type ;;(define-extern snow-switch-idle-down object) ;; unknown type ;;(define-extern snow-switch-idle-up object) ;; unknown type -;;(define-extern *snowcam-sg* object) ;; unknown type +(define-extern *snowcam-sg* skeleton-group) ;;(define-extern snow-switch-activate object) ;; unknown type -;;(define-extern *snow-gears-sg* object) ;; unknown type +(define-extern *snow-gears-sg* skeleton-group) ;;(define-extern snow-gears-idle object) ;; unknown type ;;(define-extern snow-gears-stopped object) ;; unknown type ;;(define-extern snow-gears-halt object) ;; unknown type ;;(define-extern snow-gears-activate object) ;; unknown type -;;(define-extern *snow-fort-gate-sg* object) ;; unknown type +(define-extern *snow-fort-gate-sg* skeleton-group) ;;(define-extern snow-fort-gate-idle-open object) ;; unknown type ;;(define-extern snow-fort-gate-idle-closed object) ;; unknown type ;;(define-extern snow-fort-gate-activate object) ;; unknown type -;;(define-extern *snow-spatula-sg* object) ;; unknown type +(define-extern *snow-spatula-sg* skeleton-group) ;;(define-extern snow-spatula-idle object) ;; unknown type -;;(define-extern *snowpusher-sg* object) ;; unknown type +(define-extern *snowpusher-sg* skeleton-group) ;;(define-extern snowpusher-idle object) ;; unknown type -;;(define-extern *snow-eggtop-sg* object) ;; unknown type +(define-extern *snow-eggtop-sg* skeleton-group) ;;(define-extern snow-eggtop-idle-down object) ;; unknown type ;;(define-extern snow-eggtop-idle-up object) ;; unknown type ;;(define-extern snow-eggtop-activate object) ;; unknown type @@ -42057,9 +41761,9 @@ ;; - Unknowns -;;(define-extern *flutflut-plat-large-sg* object) ;; unknown type -;;(define-extern *flutflut-plat-med-sg* object) ;; unknown type -;;(define-extern *flutflut-plat-small-sg* object) ;; unknown type +(define-extern *flutflut-plat-large-sg* skeleton-group) +(define-extern *flutflut-plat-med-sg* skeleton-group) +(define-extern *flutflut-plat-small-sg* skeleton-group) ;;(define-extern elevator-idle-at-cave object) ;; unknown type ;;(define-extern elevator-travel-to-cave object) ;; unknown type ;;(define-extern elevator-idle-at-fort object) ;; unknown type @@ -42067,7 +41771,7 @@ ;;(define-extern flutflut-plat-hidden-idle object) ;; unknown type ;;(define-extern flutflut-plat-hide object) ;; unknown type ;;(define-extern flutflut-plat-appear object) ;; unknown type -;;(define-extern *snow-button-sg* object) ;; unknown type +(define-extern *snow-button-sg* skeleton-group) ;;(define-extern snow-button-up-idle object) ;; unknown type ;;(define-extern snow-button-deactivate object) ;; unknown type ;;(define-extern snow-button-activate object) ;; unknown type @@ -42111,7 +41815,7 @@ ;; - Unknowns -;;(define-extern *snow-bumper-sg* object) ;; unknown type +(define-extern *snow-bumper-sg* skeleton-group) ;;(define-extern snow-bumper-spawn-fuel-cell object) ;; unknown type ;;(define-extern snow-bumper-inactive-idle object) ;; unknown type ;;(define-extern snow-bumper-active-far-idle object) ;; unknown type @@ -42310,8 +42014,8 @@ ;;(define-extern ram-boss-jump-down object) ;; unknown type ;;(define-extern ram-boss-already-down object) ;; unknown type ;;(define-extern ram-boss-idle object) ;; unknown type -;;(define-extern *ram-boss-sg* object) ;; unknown type -;;(define-extern *ram-boss-nav-enemy-info* object) ;; unknown type +(define-extern *ram-boss-sg* skeleton-group) +(define-extern *ram-boss-nav-enemy-info* nav-enemy-info) ;;(define-extern ram-boss-lose-shield object) ;; unknown type ;;(define-extern ram-boss-up-defend-block object) ;; unknown type ;;(define-extern ram-boss-forward-defend-block object) ;; unknown type @@ -42328,7 +42032,7 @@ ;; - Unknowns -;;(define-extern *ram-sg* object) ;; unknown type +(define-extern *ram-sg* skeleton-group) ;;(define-extern ram-fun-idle object) ;; unknown type ;;(define-extern ram-idle object) ;; unknown type ;;(define-extern ram-give-fuel-cell object) ;; unknown type @@ -42495,8 +42199,8 @@ ;;(define-extern yeti-first-time-start object) ;; unknown type ;;(define-extern yeti-idle object) ;; unknown type ;;(define-extern yeti-slave-appear-jump-up object) ;; unknown type -;;(define-extern *yeti-sg* object) ;; unknown type -;;(define-extern *yeti-nav-enemy-info* object) ;; unknown type +(define-extern *yeti-sg* skeleton-group) +(define-extern *yeti-nav-enemy-info* nav-enemy-info) ;;(define-extern yeti-slave-appear-land object) ;; unknown type ;;(define-extern yeti-slave-show-anims object) ;; unknown type @@ -42854,24 +42558,24 @@ ;; - Unknowns -;;(define-extern *lavayellowtarp-sg* object) ;; unknown type +(define-extern *lavayellowtarp-sg* skeleton-group) ;;(define-extern lavayellowtarp-idle object) ;; unknown type ;;(define-extern ripple-for-lavatube-lava object) ;; unknown type -;;(define-extern *lavaballoon-sg* object) ;; unknown type -;;(define-extern *chainmine-sg* object) ;; unknown type -;;(define-extern *lavafallsewerb-sg* object) ;; unknown type +(define-extern *lavaballoon-sg* skeleton-group) +(define-extern *chainmine-sg* skeleton-group) +(define-extern *lavafallsewerb-sg* skeleton-group) ;;(define-extern lavafallsewerb-idle object) ;; unknown type -;;(define-extern *lavafallsewera-sg* object) ;; unknown type +(define-extern *lavafallsewera-sg* skeleton-group) ;;(define-extern lavafallsewera-idle object) ;; unknown type ;;(define-extern darkecobarrel-spawner object) ;; unknown type ;;(define-extern darkecobarrel-mover-move object) ;; unknown type ;;(define-extern darkecobarrel-mover-die object) ;; unknown type -;;(define-extern *darkecobarrel-sg* object) ;; unknown type -;;(define-extern *lavashortcut-sg* object) ;; unknown type +(define-extern *darkecobarrel-sg* skeleton-group) +(define-extern *lavashortcut-sg* skeleton-group) ;;(define-extern lavashortcut-idle object) ;; unknown type -;;(define-extern *lavafall-sg* object) ;; unknown type +(define-extern *lavafall-sg* skeleton-group) ;;(define-extern lavafall-idle object) ;; unknown type -;;(define-extern *lavabase-sg* object) ;; unknown type +(define-extern *lavabase-sg* skeleton-group) ;;(define-extern lavabase-idle object) ;; unknown type @@ -43043,23 +42747,23 @@ ;; - Unknowns -;;(define-extern *energylava-sg* object) ;; unknown type +(define-extern *energylava-sg* skeleton-group) ;;(define-extern energylava-idle object) ;; unknown type -;;(define-extern *energyhub-sg* object) ;; unknown type +(define-extern *energyhub-sg* skeleton-group) ;;(define-extern energyhub-stopped object) ;; unknown type ;;(define-extern energyhub-idle object) ;; unknown type ;;(define-extern energyhub-stop object) ;; unknown type -;;(define-extern *energyarm-sg* object) ;; unknown type +(define-extern *energyarm-sg* skeleton-group) ;;(define-extern energyarm-stop object) ;; unknown type ;;(define-extern energyarm-idle object) ;; unknown type ;;(define-extern energyarm-no-ball object) ;; unknown type -;;(define-extern *energyball-sg* object) ;; unknown type +(define-extern *energyball-sg* skeleton-group) ;;(define-extern energyball-idle object) ;; unknown type -;;(define-extern *energybase-sg* object) ;; unknown type +(define-extern *energybase-sg* skeleton-group) ;;(define-extern energybase-stopped object) ;; unknown type ;;(define-extern energybase-idle object) ;; unknown type ;;(define-extern energybase-stopping object) ;; unknown type -;;(define-extern *energydoor-sg* object) ;; unknown type +(define-extern *energydoor-sg* skeleton-group) ;;(define-extern energydoor-closed-till-near object) ;; unknown type ;;(define-extern energydoor-opened object) ;; unknown type ;;(define-extern energydoor-closed-till-task object) ;; unknown type @@ -43149,7 +42853,7 @@ ;; - Unknowns -;;(define-extern *assistant-lavatube-start-sg* object) ;; unknown type +(define-extern *assistant-lavatube-start-sg* skeleton-group) ;; ---------------------- @@ -45060,16 +44764,16 @@ ;; - Types (deftype logo (process-drawable) - ((~Tcamera uint64 :offset-assert 176) - (~Tcamera-anim uint64 :offset-assert 184) - (~Tvolumes uint64 :offset-assert 192) - (~Tblack uint64 :offset-assert 200) - (~Ttarget uint64 :offset-assert 208) - (~Tsidekick uint64 :offset-assert 216) - (~Tmain-joint basic :offset-assert 224) - (~Tanim basic :offset-assert 228) - (~Tnext-anim basic :offset-assert 232) - (~Tdone? basic :offset-assert 236) + ((camera uint64 :offset-assert 176) + (camera-anim uint64 :offset-assert 184) + (volumes uint64 :offset-assert 192) + (black uint64 :offset-assert 200) + (target uint64 :offset-assert 208) + (sidekick uint64 :offset-assert 216) + (main-joint basic :offset-assert 224) + (anim basic :offset-assert 228) + (next-anim basic :offset-assert 232) + (done? basic :offset-assert 236) ) :heap-base #x80 :method-count-assert 24 @@ -45085,7 +44789,7 @@ ) (deftype logo-slave (process-drawable) - ((~Tmain-joint basic :offset-assert 176) + ((main-joint basic :offset-assert 176) ) :heap-base #x50 :method-count-assert 21 @@ -45106,15 +44810,15 @@ ;;(define-extern target-title-play object) ;; unknown type ;;(define-extern target-title-wait object) ;; unknown type -;;(define-extern *logo-japan-sg* object) ;; unknown type -;;(define-extern *logo-sg* object) ;; unknown type -;;(define-extern *ndi-sg* object) ;; unknown type -;;(define-extern *ndi-cam-sg* object) ;; unknown type -;;(define-extern *ndi-volumes-sg* object) ;; unknown type -;;(define-extern *logo-cam-sg* object) ;; unknown type -;;(define-extern *logo-volumes-japan-sg* object) ;; unknown type -;;(define-extern *logo-volumes-sg* object) ;; unknown type -;;(define-extern *logo-black-sg* object) ;; unknown type +(define-extern *logo-japan-sg* skeleton-group) +(define-extern *logo-sg* skeleton-group) +(define-extern *ndi-sg* skeleton-group) +(define-extern *ndi-cam-sg* skeleton-group) +(define-extern *ndi-volumes-sg* skeleton-group) +(define-extern *logo-cam-sg* skeleton-group) +(define-extern *logo-volumes-japan-sg* skeleton-group) +(define-extern *logo-volumes-sg* skeleton-group) +(define-extern *logo-black-sg* skeleton-group) ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index ae49fc34d1..b346771a87 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -55,7 +55,7 @@ "hexdump_code": false, "hexdump_data": false, // dump raw obj files - "dump_objs": false, + "dump_objs": true, // print control flow graph "print_cfgs": false, diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index 69197caf99..feb0fb4b40 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -572,6 +572,17 @@ [3, "(function basic symbol)"], [2, "(function process symbol)"] ], + + "anim-tester": [ + [11, "(function none :behavior anim-tester)"], + [12, "(function none :behavior anim-tester)"], + [13, "(function none :behavior anim-tester)"] + ], + + "cam-combiner": [ + [1, "(function none :behavior camera-combiner)"], + [2, "(function basic int basic event-message-block object :behavior camera-combiner)"] + ], "nav-enemy": [ [8, "(function none)"], // TODO - NECK! diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index a9b3fb733e..6c6ad2b182 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -97,23 +97,12 @@ // vector "vector=", // asm branching - // texture - // "adgif-shader<-texture-with-update!", // F: asm branching - // "(method 9 texture-page-dir)", - // collide-mesh-h "(method 11 collide-mesh-cache)", - // actor-link-h (BUG) - "(method 21 actor-link-info)", // BUG: sc cfg / cfg-ir bug - "(method 20 actor-link-info)", - // collide-func "moving-sphere-triangle-intersect", // P: weird branching "collide-do-primitives", // P: asm branching - "ray-triangle-intersect", // F: asm branching - "ray-cylinder-intersect", // F: asm branching - "raw-ray-sphere-intersect", // joint "calc-animation-from-spr", // F: asm branching @@ -124,10 +113,8 @@ "clear-frame-accumulator", // F: asm branching "cspace<-parented-transformq-joint!", - // bsp - "level-remap-texture", // BUG: probably missing branch case? - "bsp-camera-asm", // F: asm branching - "sprite-draw-distorters", + // sprite + "add-to-sprite-aux-list", // fine, but don't know types yet. // merc-blend-shape "setup-blerc-chains-for-one-fragment", // F: asm branching @@ -207,7 +194,7 @@ "draw-string", // decomp - "(method 16 level)", // BUG: cfg fails + //"(method 16 level)", // BUG: cfg fails "unpack-comp-huf", "unpack-comp-rle", @@ -245,9 +232,6 @@ "sp-process-block-2d", "sp-get-particle", - // loader BUG - "(method 10 external-art-buffer)", - // game-info BUG "(method 11 fact-info-target)", @@ -277,9 +261,6 @@ "render-boundary-quad", "draw-boundary-polygon", - // text BUG - "load-game-text-info", - // collide-probe "collide-probe-instance-tie", "collide-probe-node", @@ -348,9 +329,6 @@ "(anon-function 67 target2)", // BUG: "look-for-points-of-interest", - // menu BUG - "debug-menu-item-var-render", - // drawable-tree "(method 16 drawable-tree)", @@ -395,9 +373,6 @@ "ocean-generate-verts", "ocean-interp-wave", - // anim-tester BUG - "anim-tester-add-newobj", - // nav-enemy BUG "(anon-function 28 nav-enemy)", @@ -431,18 +406,8 @@ "(anon-function 43 maincave-obs)", "(anon-function 2 target-tube)", "(anon-function 5 orbit-plat)", - "(anon-function 2 ogreboss)", + "(anon-function 2 ogreboss)" - // not enough type info to decompile these - // (these are NOT actually asm functions) - "(method 15 sync-info)", // NEED *res-static-buf* - "(method 15 sync-info-eased)", // NEED *res-static-buf* - "(method 15 sync-info-paused)", // NEED *res-static-buf* - - // stats-h - // May or may not be inline-asm but they are related to perf counter registers that only live on the PS2 - "(method 11 perf-stat)", - "(method 12 perf-stat)" ], // these functions use pairs and the decompiler @@ -480,7 +445,9 @@ "debug-menu-send-msg", "debug-menu-find-from-template", "build-continue-menu", - "(method 8 process-tree)" + "(method 8 process-tree)", + "(method 16 load-state)", + "(method 15 load-state)" ], // If format is used with the wrong number of arguments, @@ -505,8 +472,11 @@ " pris-geo ~192H~5DK ~280Hpris-fragment~456H~5DK~%": 2, " pris-anim ~192H~5DK ~280Hpris-generic~456H~5DK~%": 2, " textures ~192H~5DK ~280Htextures~456H~5DK~%": 2, - " entity ~192H~5DK~%":2, - " misc ~192H~5DK ~280Hsprite~456H~5DK~%":2 + " entity ~192H~5DK~%": 2, + " misc ~192H~5DK ~280Hsprite~456H~5DK~%": 2, + "ERROR: ~A in spool anim loop for ~A ~D, but not loaded.~": 3, + "~0k~5d/~d ~6d/~d ~6d/~d ": 6, + "~0k~s~%": 1 }, "blocks_ending_in_asm_branch": { @@ -538,6 +508,22 @@ "adgif-shader<-texture-with-update!": [0, 1], - "display-loop": [44, 49, 66, 96] + "display-loop": [44, 49, 66, 96], + + "load-game-text-info": [12, 13, 14, 18], + + "real-main-draw-hook": [75, 77], + + "(method 12 perf-stat)": [0], + "(method 11 perf-stat)": [0], + "raw-ray-sphere-intersect": [0, 1, 2, 3, 4, 5], + "ray-cylinder-intersect": [0, 1, 2, 3, 4, 5], + "ray-triangle-intersect": [0, 1, 2, 3, 4], + "bsp-camera-asm": [1, 2, 3], + "level-remap-texture": [2, 3, 4, 5, 6], + "start-perf-stat-collection": [26], + "end-perf-stat-collection": [0], + + "sprite-draw-distorters": [4, 5] } } diff --git a/decompiler/config/jak1_ntsc_black_label/inputs.jsonc b/decompiler/config/jak1_ntsc_black_label/inputs.jsonc index 6a816ad2ba..43d16a7230 100644 --- a/decompiler/config/jak1_ntsc_black_label/inputs.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/inputs.jsonc @@ -256,5 +256,13 @@ "TEXT/4COMMON.TXT", "TEXT/5COMMON.TXT", "TEXT/6COMMON.TXT" + ], + + // uncomment the next line to extract audio to wave files. + //"audio_dir_file_name": "jak1/VAG", + "audio_dir_file_name": "", + + "streamed_audio_file_names": [ + "VAGWAD.ENG" ] } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 4ea9366a5c..3f0c8661d1 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -121,7 +121,7 @@ "ocean-h": [["L2", "ocean-work", true]], "ocean-trans-tables": [ - ["L1", "(pointer float)", true, 16], + ["L1", "(inline-array vector)", true, 4], ["L2", "(pointer float)", true, 160], ["L3", "(pointer float)", true, 100], ["L4", "(pointer float)", true, 72], @@ -144,25 +144,28 @@ "ocean-tables": [ // see comment in ocean-tables.gc - // ["L26", "ocean-spheres", true], - // ["L18", "ocean-spheres", true], - // ["L25", "ocean-colors", true], - // ["L17", "ocean-colors", true], - // ["L23", "ocean-near-indices", true], - // ["L15", "ocean-near-indices", true], - // ["L9", "ocean-near-indices", true], - // ["L22", "ocean-trans-indices", true], - // ["L14", "ocean-trans-indices", true], - // ["L8", "ocean-trans-indices", true], - // ["L21", "ocean-mid-indices", true], - // ["L13", "ocean-mid-indices", true], - // ["L7", "ocean-mid-indices", true], - // ["L19", "ocean-mid-masks", true], - // ["L11", "ocean-mid-masks", true], - // ["L5", "ocean-mid-masks", true], - // ["L4", "ocean-map", true], - // ["L3", "ocean-map", true], - // ["L2", "ocean-map", true] + ["L26", "ocean-spheres", true], + ["L25", "ocean-colors", true], + ["L23", "ocean-near-indices", true], // ok + ["L22", "ocean-trans-indices", true], + ["L21", "ocean-mid-indices", true], + ["L19", "ocean-mid-masks", true], + ["L18", "ocean-spheres", true], + ["L17", "ocean-colors", true], + ["L15", "ocean-near-indices", true], + ["L9", "ocean-near-indices", true], + + ["L14", "ocean-trans-indices", true], + ["L8", "ocean-trans-indices", true], + + ["L13", "ocean-mid-indices", true], + ["L7", "ocean-mid-indices", true], + + ["L11", "ocean-mid-masks", true], + ["L5", "ocean-mid-masks", true], + ["L4", "ocean-map", true], + ["L3", "ocean-map", true], + ["L2", "ocean-map", true] ], "ocean-frames": [["L1", "(pointer uint32)", true, 16384]], @@ -450,7 +453,12 @@ "trajectory": [["L18", "uint64", true]], - "res": [["L150", "uint64", true]], + "res": [ + ["L150", "uint64", true], + ["L152", "uint64", true], + ["L151", "uint64", true], + ["L153", "uint64", true] + ], "ripple": [ ["L73", "float", true], @@ -489,12 +497,18 @@ "cam-update-h": [["L2", "bfloat", true]], - "collide-func": [["L41", "float", true]], + "collide-func": [ + ["L41", "float", true], + ["L40", "float", true] + ], "cylinder": [ ["L27", "float", true], ["L54", "vector", true], - ["L60", "float", true] + ["L60", "float", true], + ["L57", "vector", true], + ["L56", "vector", true], + ["L53", "vector", true] ], "debug-sphere": [["L10", "debug-sphere-table", true]], @@ -556,11 +570,29 @@ ["L12", "uint64", true] ], + "shadow-cpu": [["L122", "shadow-data", true]], + "entity-table": [["L8", "(array entity-info)", true]], - "main": [["L230", "_lambda_", true], ["L309", "float", true]], + "main": [ + ["L230", "_lambda_", true], + ["L309", "float", true], + ["L306", "screen-filter", true], + ["L311", "uint64", true], + ["L312", "uint64", true], + ["L317", "uint64", true], + ["L316", "uint64", true], + ["L320", "uint64", true], + ["L314", "uint64", true], + ["L313", "uint64", true], + ["L315", "uint64", true] + ], - "geometry": [["L125", "float", true], ["L126", "float", true], ["L112", "(pointer float)", true, 4]], + "geometry": [ + ["L125", "float", true], + ["L126", "float", true], + ["L112", "(pointer float)", true, 4] + ], "level": [ ["L452", "_auto_", true], @@ -583,7 +615,11 @@ ["L255", "float", true] ], - "load-boundary": [["L327", "(inline-array lbvtx)", true, 3]], + "load-boundary": [ + ["L327", "(inline-array lbvtx)", true, 3], + ["L336", "float", true], + ["L337", "float", true] + ], "shrub-work": [["L3", "instance-shrub-work", true]], @@ -1163,9 +1199,7 @@ ["L38", "uint64", true], ["L39", "uint64", true] ], - "memory-usage": [ - ["L15", "_lambda_", true] - ], + "memory-usage": [["L15", "_lambda_", true]], "path": [ ["L47", "float", true], @@ -1174,6 +1208,211 @@ ["L79", "rgba", true] ], + "loader": [ + ["L279", "float", true], + ["L283", "float", true], + ["L285", "float", true], + ["L286", "float", true], + ["L280", "float", true], + ["L281", "float", true], + ["L278", "float", true] + ], + + "yakow": [ + ["L150", "float", true], + ["L162", "float", true], + ["L160", "float", true], + ["L155", "float", true], + ["L163", "float", true], + ["L159", "float", true], + ["L154", "float", true], + ["L153", "float", true], + ["L169", "float", true], + ["L161", "float", true], + ["L152", "float", true], + ["L149", "float", true] + ], + + "farmer": [["L50", "float", true]], + + "bsp": [ + ["L54", "rgba", true], + ["L85", "rgba", true], + ["L86", "rgba", true], + ["L55", "rgba", true], + ["L53", "uint64", true], + ["L56", "uint64", true] + ], + + "subdivide": [ + ["L129", "float", true], + ["L128", "float", true], + ["L114", "rgba", true], + ["L113", "uint64", true] + ], + + "sprite": [ + ["L93", "uint64", true], + ["L92", "uint64", true], + ["L83", "uint64", true], + ["L90", "uint64", true], + ["L91", "uint64", true], + ["L84", "uint64", true], + ["L89", "uint64", true], + ["L88", "uint64", true], + ["L86", "uint64", true], + ["L82", "uint64", true], + ["L94", "uint64", true], + ["L87", "uint64", true], + ["L85", "uint64", true] + ], + + "sprite-distort": [ + ["L42", "uint64", true], + ["L39", "uint64", true], + ["L41", "uint64", true], + ["L40", "uint64", true], + ["L37", "uint64", true], + ["L38", "uint64", true] + ], + + "anim-tester": [ + ["L615", "_auto_", true], + ["L592", "_auto_", true], + ["L509", "(inline-array list-field)", true, 12], + ["L123", "_lambda_", true], + ["L119", "_lambda_", true], + ["L86", "_lambda_", true], + ["L652", "float", true] + ], + + "default-menu": [ + ["L519", "pair", true], + ["L1550", "pair", true], + ["L1552", "pair", true] + ], + + "generic-vu1": [ + ["L12", "gif-tag64", true], + ["L15", "gif-tag64", true], + ["L14", "gif-tag-regs", true] + ], + + "main-collide": [ + ["L5", "rgba", true] + ], + + "camera": [ + ["L257", "(inline-array qword)", true, 1], + ["L258", "(inline-array qword)", true, 1], + ["L271", "float", true], + ["L278", "float", true], + ["L279", "float", true], + ["L285", "float", true], + ["L287", "float", true], + ["L288", "float", true], + ["L291", "float", true], + ["L292", "float", true], + ["L293", "float", true], + ["L297", "float", true], + ["L299", "float", true], + ["L301", "float", true], + ["L302", "float", true], + ["L312", "float", true], + ["L314", "float", true], + ["L315", "float", true], + ["L317", "float", true], + ["L321", "float", true], + ["L323", "float", true] + ], + + "cam-combiner": [ + ["L4", "_lambda_", true], + ["L54", "_lambda_", true], + ["L77", "state", true], + ["L90", "float", true] + ], + + "cam-master": [ + ["L369", "float", true], + ["L370", "float", true], + ["L371", "float", true] + ], + + "cam-update": [ + ["L82", "float", true], + ["L84", "float", true], + ["L88", "rgba", true] + ], + + "cam-states-dbg": [ + ["L90", "float", true], + ["L91", "float", true], + ["L92", "float", true], + ["L93", "float", true], + ["L94", "float", true], + ["L98", "float", true], + ["L99", "float", true] + ], + + "mood": [ + ["L256", "vector", true], + ["L257", "vector", true], + ["L258", "vector", true], + ["L259", "vector", true], + ["L260", "vector", true], + ["L261", "vector", true], + ["L262", "(inline-array vector)", true, 2], + ["L263", "light-ellipse", true], + ["L264", "(inline-array vector)", true, 4], + ["L265", "vector", true], + ["L266", "(inline-array vector)", true, 11], + ["L267", "vector", true], + ["L268", "vector", true], + ["L269", "vector", true], + ["L270", "vector", true], + ["L271", "vector", true], + ["L272", "vector", true], + ["L273", "vector", true], + ["L274", "vector", true], + ["L275", "vector", true], + ["L276", "vector", true], + ["L277", "vector", true], + ["L278", "vector", true], + ["L279", "vector", true], + ["L287", "(array float)", true], + ["L286", "(array float)", true], + ["L285", "(array float)", true], + ["L284", "(array float)", true], + ["L283", "(array float)", true], + ["L282", "(array float)", true], + ["L281", "(array float)", true], + ["L280", "(array float)", true], + ["L290", "float", true], + ["L291", "float", true], + ["L392", "float", true], + ["L393", "float", true], + ["L404", "float", true], + ["L419", "float", true], + ["L420", "float", true], + ["L421", "float", true], + ["L429", "float", true], + ["L450", "float", true], + ["L452", "float", true], + ["L453", "float", true], + ["L454", "float", true], + ["L455", "float", true], + ["L460", "float", true], + ["L461", "float", true], + ["L463", "float", true], + ["L465", "float", true], + ["L471", "float", true], + ["L480", "float", true], + ["L494", "float", true], + ["L497", "float", true], + ["L508", "float", true] + ], + "nav-enemy": [ ["L353", "float", true], ["L354", "float", true], diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index ccc492f120..b4c47694f2 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -174,7 +174,7 @@ "make-light-kit": [[16, "matrix"]], - "matrix<-parented-transformq!": [[16, "quaternion"]], + "matrix<-parented-transformq!": [[16, "vector"]], "(method 20 trsqv)": [[16, "vector"]], @@ -192,7 +192,7 @@ [16, "vector"], [32, "vector"], [48, "vector"], - [64, "quaternion"] + [64, "vector"] ], "(method 16 trsqv)": [ @@ -216,8 +216,6 @@ [32, "vector"] ], - "make-light-kit": [[16, "matrix"]], - "(method 23 trsqv)": [[16, "vector"]], "(method 24 trsqv)": [[16, "vector"]], @@ -334,6 +332,8 @@ [64, "vector"] ], + "(method 20 actor-link-info)": [[16, "event-message-block"]], + "(method 21 actor-link-info)": [[16, "event-message-block"]], "(method 23 actor-link-info)": [[16, "event-message-block"]], "(method 24 actor-link-info)": [[16, "event-message-block"]], @@ -394,9 +394,14 @@ [32, "tracking-spline-sampler"] ], - "draw-ocean-transition": [[16, "sphere"]], + "draw-ocean-transition": [ + [16, "sphere"] + ], "dm-cam-mode-func": [[16, "event-message-block"]], + "ocean-trans-add-upload-table": [ + [16, "vector"] + ], "dm-cam-settings-func": [[16, "event-message-block"]], @@ -421,6 +426,7 @@ "(method 22 level)": [[16, "event-message-block"]], "(method 9 level)": [[16, "event-message-block"]], "(method 10 load-state)": [[16, "event-message-block"]], + "cam-slave-get-rot": [[16, "quaternion"]], "draw-joint-spheres": [[16, "vector"]], "(method 16 process-drawable)": [ @@ -497,9 +503,7 @@ [64, "vector"] ], - "vector-plane-distance": [ - [16, "vector"] - ], + "vector-plane-distance": [[16, "vector"]], "curve-length": [ [16, "vector"], @@ -521,17 +525,11 @@ [32, "vector"] ], - "mem-size": [ - [16, "memory-usage-block"] - ], + "mem-size": [[16, "memory-usage-block"]], - "display-loop": [ - [16, "sphere"] - ], + "display-loop": [[16, "sphere"]], - "(method 14 curve-control)": [ - [16, "vector"] - ], + "(method 14 curve-control)": [[16, "vector"]], "(method 19 path-control)": [ [16, "vector"], @@ -540,6 +538,289 @@ [64, "vector"] ], + "progress-allowed?": [[16, "event-message-block"]], + + "(method 9 align-control)": [ + [16, "matrix"], + [80, "quaternion"] + ], + + "(method 10 align-control)": [[16, "vector"]], + + "(method 15 load-state)": [ + [16, "event-message-block"], + [96, "event-message-block"] + ], + + "(method 43 farmer)": [ + [16, "vector"] + ], + + "yakow-post": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "anim-tester-save-object-seqs": [ + [16, "file-stream"] + ], + + "anim-test-obj-list-handler": [[16, "event-message-block"]], + "anim-test-anim-list-handler": [[16, "event-message-block"]], + "anim-test-sequence-list-handler": [[16, "event-message-block"]], + "anim-test-edit-sequence-list-handler": [[16, "event-message-block"]], + "anim-test-edit-seq-insert-item": [[16, "event-message-block"]], + "anim-test-edit-sequence-list-handler": [ + [112, "event-message-block"], + [16, "font-context"] + ], + "anim-tester-add-newobj": [[16, "event-message-block"]], + "anim-tester-start": [[16, "event-message-block"]], + "anim-tester-add-sequence": [[16, "event-message-block"]], + + "(anon-function 28 task-control)": [[16, "event-message-block"]], + + "instance-tfragment-add-debug-sphere": [ + [16, "vector"] + ], + + "(method 10 game-save)": [[16, "file-stream"]], + + "cam-state-from-entity": [[16, "curve"]], + + "(method 9 cam-index)": [[16, "vector"]], + + "(method 10 cam-index)": [[16, "vector"]], + + "(method 15 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "tracking-point"] + ], + + "(method 16 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "vector"] + ], + + "(method 18 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "vector"] + ], + + "(method 20 tracking-spline)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 21 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "vector"] + ], + + "(method 22 tracking-spline)": [ + [16, "tracking-spline-sampler"], + [32, "vector"] + ], + + "cam-slave-init": [[16, "event-message-block"]], + + "cam-curve-pos": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "curve-length": [ + [16, "vector"], + [32, "vector"] + ], + + "curve-closest-point": [ + [16, "vector"], + [32, "vector"] + ], + + "cam-calc-follow!": [ + [16, "event-message-block"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [144, "vector"] + ], + + "mat-remove-z-rot": [ + [16, "vector"], + [32, "matrix"] + ], + + "slave-matrix-blend-2": [ + [16, "vector"], + [32, "quaternion"], + [48, "quaternion"], + [64, "quaternion"] + ], + + "vector-into-frustum-nosmooth!": [ + [16, "matrix"], + [80, "vector"], + [96, "vector"] + ], + + "slave-set-rotation!": [ + [16, "vector"], + [32, "matrix"], + [96, "vector"], + [112, "matrix"], // guess + [176, "vector"] // guess + ], + + "v-slrp2!": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"], + [128, "vector"] + ], + + "v-slrp3!": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"], + [128, "vector"] + ], + + "(anon-function 1 cam-combiner)": [ + [16, "vector"], + [32, "matrix"], + [80, "vector"], + [96, "matrix"] + ], + + "cam-master-init": [ + [16, "vector"], + [32, "vector"] + ], + + "plane-from-points": [[16, "vector"]], + + "update-view-planes": [ + [16, "view-frustum"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"], + [208, "vector"], + [224, "vector"] + ], + + "move-camera-from-pad": [[16, "vector"]], + + "cam-free-floating-move": [[16, "camera-free-floating-move-info"]], + + "update-camera": [ + [16, "vector"], + [32, "quaternion"], + [48, "vector"] + ], + + "ocean-make-trans-camera-masks": [ + [16, "vector"], + [32, "vector"] + ], + + "(anon-function 28 task-control)": [[16, "event-message-block"]], + + "update-mood-prt-color": [ + [16, "vector"] + ], + + "update-mood-swamp": [ + [16, "vector"] + ], + + "update-mood-village1": [ + [16, "vector"] + ], + + "update-mood-maincave": [ + [16, "vector"] + ], + + "update-mood-ogre": [ + [16, "vector"] + ], + + "update-mood-finalboss": [ + [16, "vector"], + [32, "vector"] + ], + + "update-mood-darkcave": [ + [16, "vector"], + [32, "vector"] + ], + + "update-mood-citadel": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"] + ], + + "update-mood-jungleb": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "update-mood-sunken": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "update-mood-village2": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "update-mood-rolling": [ + [16, "vector"] // TODO - really not sure about this one + ], + + "update-mood-village3": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "ocean-transition-check": [ + [16, "vector"] + ], + + "ocean-trans-add-upload-strip": [ + [16, "vector"] + ], + + "draw-ocean-transition-seams": [ + [16, "sphere"] + ], + "(method 50 nav-enemy)": [ [16, "vector"] ], diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 47ed1a3135..43c203f05f 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -206,7 +206,24 @@ "default-buffer-init": [ [[8, 15], "a1", "dma-gif-packet"], [[18, 24], "a1", "gs-gif-tag"], - [[29, 64], "a1", "(pointer uint64)"], + [29, "a1", "(pointer gs-alpha)"], + [31, "a1", "(pointer gs-reg64)"], + [33, "a1", "(pointer gs-zbuf)"], + [35, "a1", "(pointer gs-reg64)"], + [37, "a1", "(pointer gs-test)"], + [39, "a1", "(pointer gs-reg64)"], + [40, "a1", "(pointer uint64)"], + [42, "a1", "(pointer gs-reg64)"], + [44, "a1", "(pointer gs-clamp)"], + [46, "a1", "(pointer gs-reg64)"], + [48, "a1", "(pointer gs-tex1)"], + [50, "a1", "(pointer gs-reg64)"], + [53, "a1", "(pointer gs-texa)"], + [55, "a1", "(pointer gs-reg64)"], + [57, "a1", "(pointer gs-texclut)"], + [59, "a1", "(pointer gs-reg64)"], + [61, "a1", "(pointer gs-fogcol)"], + [63, "a1", "(pointer gs-reg64)"], [[69, 72], "a0", "dma-packet"] ], @@ -407,15 +424,15 @@ "adgif-shader<-texture-simple!": [[5, "v1", "uint"]], - "display-frame-start": [ - [4, "v1", "(pointer uint32)"] - ], + "display-frame-start": [[4, "v1", "(pointer uint32)"]], "display-loop": [ [152, "v1", "(pointer int32)"], [157, "a0", "(pointer process-drawable)"] ], + "load-game-text-info": [[4, "v1", "game-text-info"]], + "texture-relocate": [ [[17, 21], "t4", "dma-packet"], [[27, 30], "t4", "gs-gif-tag"], @@ -504,12 +521,46 @@ [22, "t1", "(pointer uint64)"], [29, "t2", "(pointer uint64)"] ], - "(method 18 res-lump)": [["_stack_", 16, "res-tag"]], + "(method 18 res-lump)": [["_stack_", 16, "object"]], "(method 21 res-lump)": [ ["_stack_", 16, "res-tag"], ["_stack_", 32, "res-tag"] ], + "(method 15 sync-info)": [ + ["_stack_", 16, "res-tag"], + [[19, 24], "v1", "(pointer float)"] + ], + + "(method 15 sync-info-eased)": [ + ["_stack_", 16, "res-tag"], + [[44, 49], "v1", "(pointer float)"], + [[26, 35], "v1", "(pointer float)"] + ], + + "(method 15 sync-info-paused)": [ + ["_stack_", 16, "res-tag"], + [[44, 49], "v1", "(pointer float)"], + [[26, 35], "v1", "(pointer float)"] + ], + + "(method 15 res-lump)": [[132, "s5", "res-tag-pair"]], + + "(method 17 res-lump)": [[22, "s4", "(pointer pointer)"]], + + "(method 20 res-lump)": [[331, "a3", "(inline-array vector)"]], + + "(method 8 res-lump)": [ + [215, "s0", "array"], + [[0, 100], "s0", "basic"], + [[102, 120], "s0", "basic"], + [[147, 150], "s0", "collide-mesh"], + [[157, 200], "s0", "(array object)"], + //[[197, 199], "s0", "(array basic)"], + //[[236, 240], "a0", "basic"] + [235, "s0", "basic"] + ], + // SHADOW-CPU-H "(method 10 shadow-control)": [[1, "v1", "int"]], @@ -527,7 +578,7 @@ "(method 0 fact-info)": [ [81, "v0", "float"], - [16, "t9", "(function string none)"], + //[16, "t9", "(function string none)"], ["_stack_", 16, "res-tag"], [[32, 43], "v1", "(pointer int32)"], [86, "gp", "fact-info"] @@ -535,10 +586,7 @@ "(method 0 fact-info-target)": [[[3, 20], "gp", "fact-info-target"]], - "(method 0 align-control)": [ - [[8, 13], "t9", "(function object object)"], - [[14, 18], "v0", "align-control"] - ], + "(method 0 align-control)": [[[14, 18], "v0", "align-control"]], "str-load": [[[20, 36], "s2", "load-chunk-msg"]], @@ -581,8 +629,6 @@ [[11, 18], "v0", "collide-shape-prim-group"] ], - "camera-teleport-to-entity": [[9, "a0", "transform"]], - "entity-actor-count": [["_stack_", 16, "res-tag"]], "entity-actor-lookup": [ @@ -592,8 +638,7 @@ "(method 11 joint-mod)": [ [15, "s3", "process-drawable"], - [[26, 66], "s3", "fact-info-enemy"], - [[45, 50], "v1", "(pointer process)"] + [[26, 66], "s3", "fact-info-enemy"] ], "joint-mod-look-at-handler": [[[2, 254], "gp", "joint-mod"]], @@ -622,8 +667,6 @@ "num-func-chan": [[8, "v1", "joint-control-channel"]], - "cspace-by-name-no-fail": [[[0, 100], "v0", "cspace"]], - "shrubbery-login-post-texture": [ //[[13, 41], "a3", "qword"], // [[13, 41], "a2", "qword"] @@ -641,8 +684,6 @@ "(method 3 sparticle-cpuinfo)": [[106, "f0", "float"]], - "cspace-by-name-no-fail": [[[0, 100], "v0", "cspace"]], - "camera-teleport-to-entity": [[9, "a0", "transform"]], "add-debug-sphere-from-table": [[[9, 18], "s1", "(inline-array vector)"]], @@ -704,7 +745,6 @@ "actor-link-subtask-complete-hook": [[1, "v1", "entity-links"]], "(method 0 vol-control)": [ - [[9, 14], "t9", "(function object object)"], [30, "s5", "res-lump"], [36, "s5", "res-lump"], [58, "s5", "res-lump"], @@ -729,10 +769,7 @@ ], "(method 12 art-group)": [[13, "a0", "art-joint-anim"]], - "(method 0 path-control)": [ - [15, "t9", "(function string none)"], - ["_stack_", 16, "res-tag"] - ], + "(method 0 path-control)": [["_stack_", 16, "res-tag"]], "(method 0 curve-control)": [[[13, 55], "s3", "entity"]], @@ -746,8 +783,6 @@ [77, "a0", "entity-links"] ], - "(method 0 nav-control)": [[17, "t9", "(function string none)"]], - "add-debug-point": [ [125, "a3", "pointer"], [[27, 144], "a0", "(pointer uint64)"], @@ -790,7 +825,12 @@ "debug-pad-display": [[[70, 75], "v1", "dma-packet"]], "internal-draw-debug-text-3d": [[[54, 59], "v1", "dma-packet"]], "drawable-frag-count": [[[14, 20], "s5", "drawable-group"]], - "generic-init-buffers": [[[39, 44], "v1", "dma-packet"]], + + "generic-init-buffers": [ + [[39, 44], "v1", "dma-packet"], + [25, "s5", "gs-zbuf"], + [32, "gp", "gs-zbuf"] + ], "(method 13 drawable-inline-array-collide-fragment)": [ [[1, 5], "v1", "collide-fragment"] @@ -804,7 +844,10 @@ [[1, 5], "v1", "collide-fragment"] ], - "main-cheats": [[1221, "t9", "(function cpu-thread function none)"]], + "main-cheats": [ + [1221, "t9", "(function cpu-thread function none)"], + [[1123, 1126], "v1", "dma-packet"] + ], "on": [[33, "t9", "(function cpu-thread function none)"]], "bg": [[37, "a0", "symbol"]], @@ -885,7 +928,6 @@ [[115, 154], "s3", "continue-point"] ], "(method 20 level)": [[[43, 45], "s3", "ramdisk-rpc-fill"]], - //"bg": [[[25, 52], "a0", "string"]], "(anon-function 29 process-drawable)": [ [[0, 99999], "s6", "process-drawable"] @@ -1072,6 +1114,72 @@ [[203, 210], "s4", "game-save-tag"] ], + "drawable-load": [ + [17, "s5", "drawable"], + [18, "s5", "drawable"], + [20, "s5", "drawable"], + [25, "s5", "drawable"], + [27, "s5", "drawable"] + ], + "art-load": [ + [9, "s5", "art"], + [13, "s5", "art"], + [15, "s5", "art"] + ], + "art-group-load-check": [ + [22, "s3", "art-group"], + [31, "s3", "art-group"], + [43, "s3", "art-group"], + [50, "s3", "art-group"], + [52, "s3", "art-group"] + ], + "(method 13 art-group)": [[16, "s3", "art-joint-anim"]], + "(method 14 art-group)": [[16, "s3", "art-joint-anim"]], + "(method 9 external-art-control)": [ + [171, "s4", "external-art-buffer"], + [172, "s4", "external-art-buffer"], + [173, "s4", "external-art-buffer"], + [177, "s4", "external-art-buffer"], + [183, "s4", "external-art-buffer"], + [190, "s4", "external-art-buffer"], + + [233, "s4", "spool-anim"], + [240, "s4", "spool-anim"], + [243, "s4", "spool-anim"], + [248, "s4", "spool-anim"], + [249, "s4", "spool-anim"], + [253, "s4", "spool-anim"], + [257, "s4", "spool-anim"] + ], + + "(method 10 external-art-control)": [[18, "v1", "spool-anim"]], + + "(method 16 external-art-control)": [ + [37, "a0", "process"], + [17, "s5", "process-drawable"] + ], + + "ja-play-spooled-anim": [ + [154, "a0", "process"], + [286, "s2", "art-joint-anim"], + [294, "s2", "art-joint-anim"], + [295, "s2", "art-joint-anim"], + [306, "s2", "art-joint-anim"], + [320, "s2", "art-joint-anim"], + [324, "s2", "art-joint-anim"] + ], + + "(method 11 external-art-control)": [ + [127, "a0", "process"], + [151, "a0", "process"], + [168, "a0", "process"], + [18, "s5", "process-drawable"] + ], + + "debug-menu-item-var-make-float": [ + [30, "t9", "(function int int float float int)"] + ], + "debug-menu-item-var-update-display-str": [ [[44, 49], "v1", "int"], [[61, 69], "v1", "int"] @@ -1085,11 +1193,9 @@ ], "debug-menu-item-var-joypad-handler": [ - [29, "t9", "(function int int float float float)"], [[39, 42], "a2", "int"], [[40, 42], "a3", "int"], [41, "t9", "(function int int int int int)"], - [175, "t9", "(function int int float float float)"], [200, "t9", "(function int int int int int)"], [138, "v1", "int"], [143, "v1", "int"], @@ -1130,10 +1236,7 @@ [[106, 110], "v1", "dma-packet"] ], - "debug-menu-item-var-msg": [ - [52, "t9", "(function int int float float float)"], - [64, "t9", "(function int int int int int)"] - ], + "debug-menu-item-var-msg": [[64, "t9", "(function int int int int int)"]], "debug-menu-item-var-make-int": [ [21, "t9", "(function int int int int int)"] @@ -1154,6 +1257,536 @@ [6, "a3", "symbol"] ], + "(method 9 align-control)": [ + [[27, 31], "t9", "(function object object object object)"] + ], + + "(method 8 tie-fragment)": [ + [150, "a0", "(pointer int32)"], + [[157, 160], "a0", "basic"] + ], + + "letterbox": [[[29, 33], "v1", "dma-packet"]], + + "blackout": [[[20, 24], "v1", "dma-packet"]], + + "(method 10 external-art-control)": [[18, "v1", "pointer"]], + + "(method 15 load-state)": [ + [31, "t9", "(function int)"], + [291, "s5", "entity-actor"], + [370, "s3", "process-drawable"] + ], + + "yakow-default-event-handler": [ + [27, "a0", "collide-shape"], + [32, "a0", "collide-shape"] + ], + + "(method 11 yakow)": [ + [184, "v1", "vector"], + [186, "v1", "vector"], + [189, "v1", "vector"] + ], + + "yakow-post": [ + [114, "a0", "collide-shape-moving"], + [130, "a0", "collide-shape-moving"] + ], + + "raw-ray-sphere-intersect": [ + [23, "v1", "float"], + [36, "v1", "uint"] + ], + + "(method 0 anim-test-obj)": [ + [9, "s4", "anim-test-obj"], + [10, "s4", "anim-test-obj"], + [13, "s4", "anim-test-obj"], + [15, "s4", "anim-test-obj"] + ], + + "(method 0 anim-test-sequence)": [ + [8, "s5", "anim-test-sequence"], + [11, "s5", "anim-test-sequence"], + [13, "s5", "anim-test-sequence"] + ], + + "(method 0 anim-test-seq-item)": [ + [8, "v1", "anim-test-seq-item"], + [10, "v0", "anim-test-seq-item"], + [11, "v0", "anim-test-seq-item"], + [14, "v0", "anim-test-seq-item"], + [17, "v0", "anim-test-seq-item"] + ], + + "(method 3 anim-tester)": [ + [12, "s5", "anim-test-obj"], + [15, "s5", "anim-test-obj"], + [148, "s5", "anim-test-obj"], + [150, "s5", "anim-test-obj"], + [22, "s4", "anim-test-sequence"], + [28, "s4", "anim-test-sequence"], + [38, "s4", "anim-test-sequence"], + [48, "s4", "anim-test-sequence"], + [59, "s4", "anim-test-sequence"], + [137, "s4", "anim-test-sequence"], + [139, "s4", "anim-test-sequence"], + [66, "s3", "anim-test-seq-item"], + [70, "s3", "anim-test-seq-item"], + [75, "s3", "anim-test-seq-item"], + [79, "s3", "anim-test-seq-item"], + [88, "s3", "anim-test-seq-item"], + [94, "s3", "anim-test-seq-item"], + [104, "s3", "anim-test-seq-item"], + [114, "s3", "anim-test-seq-item"], + [126, "s3", "anim-test-seq-item"], + [128, "s3", "anim-test-seq-item"] + ], + + "anim-test-obj-item-valid?": [ + [5, "s5", "anim-test-sequence"], + [12, "s5", "anim-test-sequence"], + [17, "s5", "anim-test-sequence"], + [36, "s5", "anim-test-sequence"], + [38, "s5", "anim-test-sequence"], + [20, "v1", "anim-test-seq-item"], + [26, "v1", "anim-test-seq-item"], + [28, "v1", "anim-test-seq-item"] + ], + + "anim-test-obj-remove-invalid": [ + [84, "v1", "anim-test-sequence"], + [88, "v1", "anim-test-sequence"], + [90, "v1", "anim-test-sequence"], + [92, "v1", "anim-test-sequence"], + [93, "v1", "anim-test-sequence"], + [91, "a0", "anim-test-sequence"], + [5, "s5", "anim-test-sequence"], + [8, "s5", "anim-test-sequence"], + [11, "s5", "anim-test-sequence"], + [30, "s5", "anim-test-sequence"], + [44, "s5", "anim-test-sequence"], + [51, "s5", "anim-test-sequence"], + [58, "s5", "anim-test-sequence"], + [67, "s5", "anim-test-sequence"], + [70, "s4", "anim-test-sequence"], + [71, "s5", "anim-test-sequence"], + [72, "s5", "anim-test-sequence"], + [15, "s3", "anim-test-seq-item"], + [18, "s3", "anim-test-seq-item"], + [24, "s3", "anim-test-seq-item"], + [31, "s3", "anim-test-seq-item"], + [34, "s2", "anim-test-seq-item"], + [35, "s3", "anim-test-seq-item"], + [36, "s3", "anim-test-seq-item"], + [61, "a0", "anim-test-seq-item"] + ], + + "anim-tester-reset": [ + [14, "v1", "anim-test-obj"], + [30, "v1", "anim-test-obj"], + [33, "v1", "anim-test-obj"], + [36, "v1", "anim-test-obj"], + [43, "v1", "anim-test-obj"], + [[50, 53], "v1", "anim-test-obj"] + ], + + "anim-tester-save-all-objects": [ + [[4, 19], "gp", "anim-test-obj"], + [17, "v1", "anim-test-obj"] + ], + + "anim-tester-save-object-seqs": [ + [63, "s5", "anim-test-sequence"], + [69, "s5", "anim-test-sequence"], + [65, "s5", "anim-test-sequence"], + [75, "s5", "anim-test-sequence"], + [79, "s5", "anim-test-sequence"], + [133, "s5", "anim-test-sequence"], + [141, "s5", "anim-test-sequence"], + [142, "v1", "anim-test-sequence"], + [143, "s5", "anim-test-sequence"], + [83, "s4", "anim-test-seq-item"], + [89, "s4", "anim-test-seq-item"], + [91, "s4", "anim-test-seq-item"], + [92, "s4", "anim-test-seq-item"], + [96, "s4", "anim-test-seq-item"], + [105, "s4", "anim-test-seq-item"], + [111, "s4", "anim-test-seq-item"], + [120, "s4", "anim-test-seq-item"], + [121, "v1", "anim-test-seq-item"], + [122, "s4", "anim-test-seq-item"] + ], + + "anim-test-obj-list-handler": [ + [25, "s5", "anim-test-obj"], + [31, "s5", "anim-test-obj"], + [110, "s5", "anim-test-obj"], + [166, "s5", "anim-test-obj"], + [112, "v1", "anim-tester"] + ], + + "anim-test-anim-list-handler": [ + [2, "s5", "anim-test-obj"], + [25, "s5", "anim-test-obj"], + [65, "s5", "anim-test-obj"], + [227, "s5", "anim-test-obj"], + [90, "v1", "anim-test-obj"], + [91, "v1", "anim-test-obj"], + [100, "v1", "anim-test-obj"], + [105, "v1", "anim-test-obj"], + [130, "v1", "anim-test-obj"], + [131, "v1", "anim-test-obj"], + [140, "v1", "anim-test-obj"], + [145, "v1", "anim-test-obj"], + [167, "v1", "anim-test-obj"], + [169, "v1", "anim-test-obj"], + [171, "v1", "anim-test-obj"], + [173, "v1", "anim-test-obj"] + ], + + "anim-test-sequence-list-handler": [ + [2, "s5", "anim-test-sequence"], + [25, "s5", "anim-test-sequence"], + [31, "s5", "anim-test-sequence"], + [71, "s5", "anim-test-sequence"], + [231, "s5", "anim-test-sequence"], + [96, "v1", "anim-test-sequence"], + [97, "v1", "anim-test-sequence"], + [106, "v1", "anim-test-sequence"], + [111, "v1", "anim-test-sequence"], + [136, "v1", "anim-test-sequence"], + [137, "v1", "anim-test-sequence"], + [146, "v1", "anim-test-sequence"], + [151, "v1", "anim-test-sequence"] + ], + + "anim-test-edit-sequence-list-handler": [ + [[122, 965], "s4", "anim-test-sequence"], + [129, "v1", "glst-named-node"], + [[128, 909], "gp", "anim-test-seq-item"], + [380, "v0", "anim-test-obj"], + [381, "v0", "anim-test-obj"], + [382, "v0", "anim-test-obj"], + [389, "v0", "anim-test-obj"], + [483, "s3", "anim-test-seq-item"], + [491, "s3", "anim-test-seq-item"], + [502, "s3", "anim-test-seq-item"] + ], + + "anim-tester-interface": [ + [[34, 48], "gp", "anim-test-obj"], + [[95, 109], "gp", "anim-test-obj"], + [[156, 160], "v1", "anim-test-obj"], + [[162, 165], "v1", "anim-test-sequence"] + ], + + "anim-tester-get-playing-item": [ + [7, "v0", "anim-test-seq-item"], + [[5, 22], "s5", "anim-test-seq-item"], + [21, "v0", "anim-test-seq-item"], + [25, "v0", "anim-test-seq-item"] + ], + + "anim-tester-add-newobj": [ + [[2, 185], "s2", "anim-test-obj"], + [[70, 193], "s5", "anim-test-obj"], + [149, "v1", "anim-test-sequence"], + [154, "v1", "anim-test-sequence"], + [160, "v1", "anim-test-sequence"], + [164, "a0", "art-joint-anim"], + [170, "a0", "art-joint-anim"] + ], + + "anim-tester-start": [[20, "t9", "(function process function none)"]], + + "anim-tester-set-name": [ + [[34, 51], "s3", "anim-test-obj"], + [[40, 63], "s5", "anim-test-sequence"] + ], + + "anim-tester-add-sequence": [[[33, 102], "s5", "anim-test-obj"]], + + "(anon-function 11 anim-tester)": [ + [[23, 113], "s4", "anim-test-obj"], + [[83, 338], "gp", "anim-test-sequence"], + [[123, 187], "s4", "art-joint-anim"] + ], + + "(method 10 bsp-header)": [ + [[51, 61], "a0", "(pointer uint128)"], + [[51, 61], "a1", "(pointer uint128)"], + [133, "v1", "terrain-bsp"], + [141, "v1", "terrain-bsp"], + [148, "v1", "terrain-bsp"], + [5, "a0", "terrain-bsp"], + [8, "a0", "terrain-bsp"] + ], + + "(method 15 bsp-header)": [ + [5, "a0", "terrain-bsp"], + [8, "a0", "terrain-bsp"] + ], + + "bsp-camera-asm": [ + [[4, 14], "a1", "bsp-node"], + [[0, 9], "v1", "bsp-node"], + [[12, 16], "v1", "bsp-node"] + ], + + "level-remap-texture": [ + [15, "t0", "(pointer int32)"], + [21, "t0", "(pointer int32)"], + [19, "t0", "(pointer uint64)"], + [12, "v1", "int"] + ], + + "sprite-add-matrix-data": [ + [[5, 15], "a2", "dma-packet"], + [[24, 29], "a1", "matrix"], + [[47, 57], "a2", "dma-packet"], + [[60, 97], "a1", "matrix"], + [[116, 129], "a1", "vector"] + ], + + "sprite-add-frame-data": [[[8, 16], "a0", "dma-packet"]], + + "sprite-add-2d-chunk": [ + [[12, 20], "a0", "dma-packet"], + [[45, 52], "a0", "dma-packet"], + [[69, 76], "a0", "dma-packet"], + [[80, 87], "v1", "dma-packet"] + ], + + "sprite-add-3d-chunk": [ + [[11, 19], "a0", "dma-packet"], + [[44, 51], "a0", "dma-packet"], + [[68, 75], "a0", "dma-packet"], + [[79, 87], "v1", "dma-packet"] + ], + + "sprite-add-shadow-chunk": [ + [[11, 19], "a0", "dma-packet"], + [[37, 44], "a0", "dma-packet"], + [[49, 77], "a0", "(inline-array vector)"], + [[93, 100], "a0", "dma-packet"], + [[105, 121], "s1", "adgif-shader"], + [[130, 138], "v1", "dma-packet"] + ], + + "sprite-draw": [ + [[33, 37], "a0", "dma-packet"], + [[43, 46], "a0", "gs-gif-tag"], + [51, "a0", "(pointer gs-test)"], + [53, "a0", "(pointer gs-reg64)"], + [55, "a0", "(pointer gs-clamp)"], + [57, "a0", "(pointer gs-reg64)"], + [[78, 87], "a0", "dma-packet"], + [[92, 97], "a0", "dma-packet"], + [[125, 129], "a0", "dma-packet"], + [[143, 146], "v1", "dma-packet"] + ], + + "sprite-init-distorter": [ + [59, "a3", "uint"], + [[3, 7], "a2", "dma-packet"], + [[13, 16], "a2", "gs-gif-tag"], + [21, "a2", "(pointer gs-zbuf)"], + [23, "a2", "(pointer gs-reg64)"], + [29, "a2", "(pointer gs-tex0)"], + [31, "a2", "(pointer gs-reg64)"], + [33, "a2", "(pointer gs-tex1)"], + [35, "a2", "(pointer gs-reg64)"], + [36, "a2", "(pointer gs-miptbp)"], + [38, "a2", "(pointer gs-reg64)"], + [45, "a2", "(pointer gs-clamp)"], + [47, "a2", "(pointer gs-reg64)"], + [49, "a2", "(pointer gs-alpha)"], + [51, "a2", "(pointer gs-reg64)"], + [[62, 67], "a1", "dma-packet"] + ], + + "sprite-draw-distorters": [ + [[70, 90], "a0", "vector"], + [72, "v1", "vector"], + [93, "v1", "vector"], + [96, "v1", "vector"], + [115, "v1", "(pointer int32)"], + [119, "a0", "(pointer int32)"], + [124, "v1", "vector"], + [154, "v1", "vector"], + [[172, 189], "a1", "dma-packet"] + ], + + "debug-menu-make-from-template": [ + [[20, 30], "s5", "string"], + [[31, 60], "s5", "string"], + [[61, 71], "s5", "string"], + [[72, 81], "s5", "string"], + [[82, 107], "s5", "string"], + [[108, 135], "s5", "string"], + [[136, 152], "s5", "string"], + [[153, 183], "s5", "string"], + [[186, 224], "s5", "string"], + [[225, 246], "s5", "string"], + [[249, 321], "s5", "string"] + ], + + "debug-menu-item-var-render": [[[94, 98], "v1", "dma-packet"]], + + "generic-add-constants": [[[8, 17], "a0", "dma-packet"]], + + "generic-init-buf": [ + [[14, 19], "a0", "dma-packet"], + [[24, 28], "a0", "gs-gif-tag"], + [32, "a0", "(pointer gs-test)"], + [34, "a0", "(pointer uint64)"], + [34, "a1", "gs-reg"], + [35, "a0", "(pointer gs-zbuf)"], + [37, "a0", "(pointer uint64)"], + [37, "a1", "gs-reg"], + [[47, 53], "a0", "dma-packet"], + [[56, 62], "v1", "(pointer vif-tag)"], + [[62, 66], "v1", "(pointer int32)"] + ], + + "cam-standard-event-handler": [ + [[0, 999], "s6", "camera-slave"], + [[16, 30], "s5", "state"], + [41, "a0", "vector"], + [[5, 8], "t9", "(function object)"], + [[19, 22], "t9", "(function object)"], + [[30, 32], "t9", "(function object)"] + ], + + "cam-curve-pos": [[[0, 224], "s6", "camera-slave"]], + + "cam-combiner-init": [ + [[0, 999], "s6", "camera-combiner"], + [[28, 33], "t9", "(function object)"] + ], + + "(anon-function 1 cam-combiner)": [[[0, 999], "s6", "camera-combiner"]], + + "(anon-function 2 cam-combiner)": [ + [10, "a0", "vector"], + [[0, 20], "s6", "camera-slave"], + [[20, 231], "s6", "camera-combiner"], + [[99, 127], "gp", "camera-slave"], + [[187, 231], "gp", "camera-slave"] + ], + + "cam-start": [ + [[18, 22], "t9", "(function process object function)"], + [[38, 42], "t9", "(function process object function)"] + ], + + "cam-master-init": [ + [[0, 999], "s6", "camera-master"], + [[111, 115], "t9", "(function cpu-thread function)"], + [[139, 145], "t9", "(function cpu-thread function object object)"], + [[163, 167], "t9", "(function object)"] + ], + + "cam-curve-setup": [[[0, 82], "s6", "camera-slave"]], + + "(method 15 tracking-spline)": [ + [[57, 59], "a2", "vector"], + [[57, 59], "a3", "vector"] + ], + + "(method 16 tracking-spline)": [ + [[40, 42], "a0", "vector"], + [[40, 42], "a1", "vector"] + ], + + "cam-slave-init-vars": [[[0, 999], "s6", "camera-slave"]], + + "cam-slave-get-vector-with-offset": [[[52, 65], "s3", "vector"]], + + "cam-slave-go": [[[3, 6], "t9", "(function object)"]], + + "cam-slave-init": [ + [[0, 999], "s6", "camera-slave"], + [[47, 50], "t9", "(function object object)"], + [[54, 58], "t9", "(function object object)"] + ], + + "update-mood-village3": [ + [[236, 245], "s0", "(array float)"], + [245, "s0", "(array int8)"], + [[246, 297], "s0", "(array float)"], + [[297, 309], "s0", "(array uint8)"], + [[309, 314], "s0", "matrix"] // TODO - there is no way this is correct lol + ], + + "update-mood-citadel": [ + [291, "s5", "(pointer float)"], + [298, "s5", "(pointer float)"], + [300, "s5", "(pointer float)"], + [304, "s5", "(pointer float)"], + [307, "s5", "(pointer float)"], + [318, "s5", "(pointer float)"] + ], + + "update-mood-finalboss": [ + [40, "s4", "(pointer int64)"], + [44, "s4", "(pointer int64)"], + [174, "s4", "(pointer int64)"], + [251, "s4", "(pointer int64)"], + [255, "s4", "(pointer int64)"], + [347, "s4", "(pointer int64)"] + ], + + "update-mood-ogre": [ + [57, "s4", "(pointer float)"], + [64, "s4", "(pointer float)"], + [90, "s4", "(pointer float)"], + [92, "s4", "(pointer float)"], + [95, "s4", "(pointer float)"], + [98, "s4", "(pointer float)"], + [100, "s4", "(pointer float)"], + [105, "s4", "(pointer float)"], + [144, "s4", "(pointer float)"] + ], + + "update-mood-snow": [ + [93, "s5", "vector"], + [110, "s5", "vector"] + ], + + "ocean-trans-add-upload-table": [ + [44, "a0", "dma-packet"], + [46, "a0", "dma-packet"], + [51, "a0", "dma-packet"], + [[55, 59], "v1", "vector4w"], // TODO - very likely wrong, but it's something that has 4 int32's, + [[87, 228], "v1", "(inline-array vector)"], + [241, "a0", "dma-packet"], + [243, "a0", "dma-packet"], + [248, "a0", "dma-packet"] + ], + + "ocean-trans-add-upload-strip": [ + [39, "a0", "dma-packet"], + [41, "a0", "dma-packet"], + [46, "a0", "dma-packet"], + [[57, 61], "v1", "vector4w"], // TODO - very likely wrong, but it's something that has 4 int32's, + [[64, 147], "v1", "(inline-array vector)"], // TODO - very likely wrong, but it's something that has 4 int32's, + [166, "a0", "dma-packet"], + [168, "a0", "dma-packet"], + [173, "a0", "dma-packet"] + ], + + "ocean-trans-add-constants": [ + [7, "a1", "dma-packet"], + [9, "a1", "dma-packet"], + [14, "a1", "dma-packet"], + [[17, 46], "v1", "matrix"] + ], + + "draw-ocean-transition": [[255, "v1", "ocean-mid-mask"]], + "(method 42 nav-enemy)": [ [[5, 9], "t9", "(function object object)"] ], diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index fb5d4f1bae..1e6612bbc5 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -1215,7 +1215,7 @@ "sv-48": "page-id", "s0-0": "upload-chunk-idx", "sv-52": "current-dest-chunk", - "sv-56": "allow-cached", + "sv-56": "need-tex", "gp-0": "total-upload-size", "a0-21": ["dma", "dma-packet"], "a0-23": ["gif", "gs-gif-tag"], @@ -1385,24 +1385,22 @@ }, "display-loop": { - "vars": { - - } + "vars": {} }, "adgif-shader-login": { - "args":"shader", + "args": "shader", "vars": { - "s5-0":"tex" + "s5-0": "tex" } }, "adgif-shader-login-fast": { - "args":["shader"], - "vars":{ - "v1-4":"tex-id", - "a0-9":"dir-entry", - "s5-0":"tex" + "args": ["shader"], + "vars": { + "v1-4": "tex-id", + "a0-9": "dir-entry", + "s5-0": "tex" } }, @@ -1713,6 +1711,16 @@ } }, + "(method 20 actor-link-info)": { + "args": ["obj", "message"], + "vars": { + "s4-0": "iter", + "s5-0": "result", + "a0-1": "proc", + "a1-1": "msg-block" + } + }, + // LEVEL "lookup-level-info": { "args": ["name"], @@ -1800,7 +1808,28 @@ }, "(method 15 res-lump)": { "vars": { - "s5-0": ["tag-pair", "res-tag-pair"] + "s5-0": ["tag-pair", "res-tag-pair"], + "s2-0": "existing-tag", + "s3-0": "data-size", + "v1-25": "resource-mem" + } + }, + + "(method 17 res-lump)": { + "vars": { + "a0-2": "new-tag", + "s4-0": "tag-mem" + } + }, + + "(method 8 res-lump)": { + "args": ["obj", "block", "flags"], + "vars": { + "s3-0": "mem-use-id", + "s2-0": "mem-use-name", + "v1-22": "obj-size", + "s1-0": "tag-idx", + "s0-0": "tag-data" } }, @@ -1820,8 +1849,7 @@ "vars": { "gp-0": ["obj", "fact-info"], "s5-0": "ent", - "sv-16": "tag", - "t9-1": ["go-func", "(function string none)"] + "sv-16": "tag" } }, @@ -1963,8 +1991,7 @@ "vars": { "s1-0": "proc-drawable", "s3-1": ["enemy-facts", "fact-info-enemy"], - "f30-0": "dist", - "v1-12": ["ppointer", "(pointer process)"] + "f30-0": "dist" } }, @@ -2135,6 +2162,7 @@ }, "add-debug-point": { + "args": ["enable-draw", "bucket", "pt"], "vars": { "a0-6": ["a0-6", "(pointer uint64)"], "a0-7": ["a0-7", "dma-packet"], @@ -2143,7 +2171,8 @@ "a3-4": ["a3-4", "vector4w-2"], "a3-6": ["a3-6", "vector4w-2"], "a3-8": ["a3-8", "vector4w-2"], - "a1-30": ["a1-30", "vector4w-2"] + "a1-30": ["a1-30", "vector4w-2"], + "v1-7": "buf" } }, "internal-draw-debug-line": { @@ -2195,7 +2224,9 @@ "generic-init-buffers": { "vars": { - "v1-8": ["packet", "dma-packet"] + "v1-8": ["packet", "dma-packet"], + "gp-0": ["gp-0", "gs-zbuf"], + "s5-0": ["s5-0", "gs-zbuf"] } }, @@ -2317,5 +2348,696 @@ "vars": { "v0-0": ["ret-val", "symbol"] } - } + }, + + "letterbox": { + "vars": { + "s5-0": "dma-buf", + "v1-5": ["pkt", "dma-packet"] + } + }, + + "blackout": { + "vars": { + "s5-0": "dma-buf", + "gp-0": "sprite-dma-data", + "v1-4": ["pkt", "dma-packet"] + } + }, + + "set-master-mode": { + "args": ["new-mode"], + "vars": { "v1-3": "mode" } + }, + + "main-cheats": { + "vars": { + "v1-13": "cheatmode-state", + "v1-158": "cheatmode-debug-state", + "v1-303": "cheat-language-state", + "v1-394": "cheat-pal-state", + "s5-9": "dma-buff", + "gp-9": "dma-start", + "v1-533": ["dma-pkt", "dma-packet"], + "gp-10": "timeout", + "v1-548": "inactive-timeout", + "gp-11": "game-end-proc" + } + }, + + "load-game-text-info": { + "args": ["txt-name", "curr-text", "heap"], + "vars": { + "sv-16": "heap-sym-heap", + "sv-24": "lang", + "sv-32": "load-status", + "sv-40": "heap-free" + } + }, + + "(method 13 art-group)": { + "vars": { + "s3-0": "art-elt", + "s4-0": "janim", + "v1-9": "janim-group", + "s2-0": "success" + } + }, + + "(method 14 art-group)": { + "vars": { + "s3-0": "art-elt", + "s4-0": "janim", + "v1-9": "janim-group", + "s3-1": "success" + } + }, + + "(method 16 process-drawable)": { + "vars": { + "s3-0": "body-T-world", + "s0-0": "world-T-body", + "s2-0": "grav-rt-body", + "a1-5": "vel-rt-body" + } + }, + + "(method 11 cam-float-seeker)": { + "args": ["obj", "offset"], + "vars": { + "f1-2": "pos-error", + "f0-5": "partial-velocity-limit", + "f1-3": "daccel", + "f1-6": "abs-vel", + "f0-6": "abs-vel-limit", + "f0-10": "dpos" + } + }, + + "(method 9 trsqv)": { + "args": ["obj", "dir", "vel", "frame-count"], + "vars": { + "f0-0": "yaw-error", + "f1-2": "yaw-limit", + "f30-0": "saturated-yaw", + "a1-2": "quat", + "f0-2": "old-diff" + } + }, + + "(method 13 trsqv)": { + "args": ["obj", "yaw", "vel", "frame-count"] + }, + + "(method 16 trsqv)": { + "vars": { + "s5-0": "quat", + "s1-0": "grav", + "s3-0": "rot-mat", + "s4-0": "dir-z", + "a0-4": "dir-x" + } + }, + + "(method 25 trsqv)": { + "vars": { + "s5-0": "quat", + "gp-0": "dir-z", + "s5-1": "dir-y", + "a1-2": "dir-grav", + "v1-2": "grav-z-plane", + "f0-1": "grav-dot" + } + }, + + "(method 17 trsqv)": { + "args": ["obj", "target", "y-rate", "z-rate"], + "vars": { + "gp-0": "quat", + "s5-0": "temp-quat" + } + }, + + "raw-ray-sphere-intersect": { + "vars": { + "v0-0": ["result", "float"], + "v1-0": ["v1-0", "float"] + } + }, + + "ray-sphere-intersect": { + "args": ["ray-origin", "ray-dir", "sph-origin", "radius"] + }, + + "ray-circle-intersect": { + "args": ["ray-origin", "ray-dir", "circle-origin", "radius"] + }, + + "ray-cylinder-intersect": { + "args": [ + "ray-origin", + "ray-dir", + "cyl-origin", + "cyl-axis", + "cyl-rad", + "cyl-len" + ] + }, + + "(method 10 cylinder)": { + "args": ["obj", "probe-origin", "probe-dir"], + "vars": { + "f30-0": "result", + "f0-5": "u-origin-sph", + "s4-0": "end-pt", + "f0-8": "u-end-sphere" + } + }, + + "(method 10 cylinder-flat)": { + "args": ["obj", "probe-origin", "probe-dir"], + "vars": { + "f30-0": "result", + "f0-5": "u-origin-circle", + "s5-0": "end-pt", + "f0-8": "u-end-circle" + } + }, + + "ray-arbitrary-circle-intersect": { + "args": [ + "probe-origin", + "probe-dir", + "circle-origin", + "circle-normal", + "radius" + ] + }, + + "print-tr-stat": { + "args": ["stat", "name", "dest"] + }, + + "update-subdivide-settings!": { + "args": ["settings", "math-cam", "idx"] + }, + + "start-perf-stat-collection": { + "vars": { + "v1-2": "frame-idx", + "v1-5": "bucket", + "a0-2": "which-stat", + "a0-7": "stat-idx" + } + }, + + "ja-play-spooled-anim": { + "vars": { + "sv-16": "spool-part", + "sv-28": "old-skel-status", + "sv-64": "spool-sound" + } + }, + + "(method 3 anim-tester)": { + "vars": { + "s5-0": ["s5-0", "anim-test-obj"], + "s4-0": ["s4-0", "anim-test-sequence"], + "s3-0": ["s3-0", "anim-test-seq-item"] + } + }, + + "anim-test-obj-item-valid?": { + "vars": { + "s5-0": ["s5-0", "anim-test-sequence"] + } + }, + + "anim-test-obj-remove-invalid": { + "vars": { + //"s5-0": ["s5-0", "anim-test-sequence"], + "v1-31": ["v1-31", "anim-test-sequence"], + "s3-0": ["s3-0", "anim-test-seq-item"], + "s2-0": ["s2-0", "anim-test-seq-item"] + } + }, + + "anim-tester-reset": { + "vars": { + "v1-1": ["v1-1", "anim-test-obj"] + } + }, + + "anim-tester-save-object-seqs": { + "vars": { + "s4-2": ["s4-2", "anim-test-seq-item"] + } + }, + + "sprite-setup-header": { + "args": ["hdr", "num-sprites"] + }, + + "(method 0 sprite-aux-list)": { + "args": ["allocation", "type-to-make", "size"] + }, + + "sprite-setup-frame-data": { + "args": ["data", "tbp-offset"] + }, + + "(method 0 sprite-array-2d)": { + "args": ["allocation", "type-to-make", "group-0-size", "group-1-size"], + "vars": { + "v1-0": "sprite-count", + "s4-0": "vec-data-size", + "a2-3": "adgif-data-size" + } + }, + + "(method 0 sprite-array-3d)": { + "args": ["allocation", "type-to-make", "group-0-size", "group-1-size"], + "vars": { + "v1-0": "sprite-count", + "s4-0": "vec-data-size", + "a2-3": "adgif-data-size" + } + }, + + "sprite-set-3d-quaternion": { + "args": ["data", "quat"] + }, + "sprite-get-3d-quaternion": { + "args": ["data", "quat"] + }, + "sprite-add-matrix-data": { + "args": ["dma-buff", "matrix-mode"], + "vars": { + "v1-0": "count", + "a2-1": ["pkt1", "dma-packet"], + "a1-2": ["mtx", "matrix"], + "a2-9": ["pkt2", "dma-packet"], + "a1-11": "mtx2", + "a1-20": "hvdf-idx" + } + }, + + "sprite-add-frame-data": { + "args": ["dma-buff", "tbp-offset"], + "vars": { + "a0-1": ["pkt", "dma-packet"] + } + }, + + "sprite-add-2d-chunk": { + "args": [ + "sprites", + "start-sprite-idx", + "num-sprites", + "dma-buff", + "mscal-addr" + ], + "vars": { + "a0-1": ["pkt1", "dma-packet"], + "s1-0": "qwc-pkt1", + "a1-7": "qwc-pkt2", + "a0-5": ["pkt2", "dma-packet"], + "a1-11": "qwc-pkt3", + "a0-7": ["pkt3", "dma-packet"], + "v1-7": ["pkt4", "dma-packet"] + } + }, + + "sprite-add-2d-all": { + "args": ["sprites", "dma-buff", "group-idx"], + "vars": { + "s4-0": "current-sprite-idx", + "s2-0": "remaining-sprites", + "s3-0": "mscal-addr" + } + }, + + "sprite-add-3d-chunk": { + "args": ["sprites", "start-sprite-idx", "num-sprites", "dma-buff"], + "vars": { + "a0-1": ["pkt1", "dma-packet"], + "s2-0": "qwc-pkt1", + "a1-7": "qwc-pkt2", + "a0-5": ["pkt2", "dma-packet"], + "a1-11": "qwc-pkt3", + "a0-7": ["pkt3", "dma-packet"], + "v1-7": ["pkt4", "dma-packet"] + } + }, + + "sprite-add-3d-all": { + "args": ["sprites", "dma-buff", "group-idx"], + "vars": { + "s4-0": "current-sprite-idx", + "s3-0": "remaining-sprites" + } + }, + + "sprite-add-shadow-chunk": { + "args": ["shadow-buff", "start-idx", "num-sprites", "dma-buff"], + "vars": { + "s2-0": "qwc-pkt1", + "a0-1": ["pkt1", "dma-packet"], + "a1-7": "qwc-pkt2", + "a0-5": ["pkt2", "dma-packet"], + "v1-5": "sprite-idx", + "a0-7": "dma-vec-data", + "a1-14": "in-vec-data", + "a1-15": "qwc-pkt3", + "a0-11": ["pkt3", "dma-packet"], + "s2-1": "si", + "s1-0": "dma-adgif-data", + "s0-0": "in-adgif-data", + "v1-21": ["pkt4", "dma-packet"] + } + }, + + "sprite-add-shadow-all": { + "args": ["shadow-buff", "dma-buff"], + "vars": { + "s4-0": "current-shadow", + "s3-0": "remaining-shadows" + } + }, + + "sprite-draw": { + "args": "disp", + "vars": { + "gp-0": "dma-mem-begin", + "s4-0": "dma-buff", + "s5-0": "dma-bucket-begin", + "a0-9": ["pkt1", "dma-packet"], + "a0-11": ["giftag", "gs-gif-tag"], + "a0-17": ["pkt2", "dma-packet"], + "a0-19": ["pkt3", "dma-packet"], + "a0-26": ["pkt4", "dma-packet"], + "v1-26": ["pkt5", "dma-packet"], + "v1-31": "mem-use" + } + }, + + "mem-usage-bsp-tree": { + "args": ["header", "node", "mem-use", "flags"] + }, + + "(method 8 bsp-header)": { + "args": ["obj", "mem-use", "flags"] + }, + + "(method 10 bsp-header)": { + "args": ["obj", "other-draw", "disp-frame"], + "vars": { + "s4-0": "lev", + "a2-3": "vis-list-qwc", + "v1-15": "vis-list-qwc2", + "a0-9": ["vis-list-spad", "(pointer uint128)"], + "a1-5": ["vis-list-lev", "(pointer uint128)"], + "a2-4": "current-qw" + } + }, + + "bsp-camera-asm": { + "args": ["bsp-hdr", "camera-pos"], + "vars": { + "v1-0": ["next-node", "bsp-node"], + "a1-1": "real-node" + } + }, + + "level-remap-texture": { + "args": ["tex-id"], + "vars": { + "v1-1": "bsp-hdr", + "a3-0": "table-size", + "v1-2": ["table-data-start", "(pointer uint64)"], + "t0-0": "table-data-ptr", + "a1-1": "mask1", + "a2-1": "masked-tex-id", + "a3-2": "table-data-end", + "t0-3": "midpoint", + "t1-1": "diff" + } + }, + + "debug-menu-make-from-template": { + "vars": { + "s5-1": ["s5-1", "string"] + } + }, + + "debug-menu-item-var-render": { + "vars": { + "v1-14": ["v1-14", "dma-packet"] + } + }, + + "generic-add-constants": { + "vars": { + "a0-1": ["a0-1", "dma-packet"] + } + }, + + "generic-init-buf": { + "vars": { + "a0-2": ["a0-2", "dma-packet"], + "a0-4": ["a0-4", "gs-gif-tag"], + "a0-9": ["a0-9", "dma-packet"], + "v1-7": ["v1-7", "(pointer int32)"] + } + }, + + "(anon-function 1 cam-combiner)": { + "vars": { + "pp": ["pp", "process"] + } + }, + + "(anon-function 2 cam-combiner)": { + "vars": { + "a0-3": ["vec", "(pointer vector)"] + } + }, + + "(method 14 sync-info)": { + "args": ["obj", "period", "phase"], + "vars": { + "f0-1": "period-float", + "f1-1": "value" + } + }, + + "(method 14 sync-info-eased)": { + "args": ["obj", "period", "phase", "out-param", "in-param"], + "vars": { + "f0-9": "total-easing-phase", + "f1-11": "total-normal-phase", + "f0-1": "period-float", + "f1-1": "value", + "f3-4": "y-end" + } + }, + + "(method 14 sync-info-paused)": { + "args": ["obj", "period", "phase", "out-param", "in-param"] + }, + + "(method 15 sync-info)": { + "args": [ + "obj", + "proc", + "default-period", + "default-phase", + "default-out", + "default-in" + ] + }, + + "(method 15 sync-info-eased)": { + "args": [ + "obj", + "proc", + "default-period", + "default-phase", + "default-out", + "default-in" + ] + }, + + "(method 15 sync-info-paused)": { + "args": [ + "obj", + "proc", + "default-period", + "default-phase", + "default-out", + "default-in" + ] + }, + + "(method 10 sync-info)": { + "vars": { + "v1-0": "period", + "f0-1": "period-float", + "f1-2": "current-time" + } + }, + + "(method 16 sync-info)": { + "args": ["obj", "user-time-offset"], + "vars": { + "a2-0": "period", + "f0-1": "period-float", + "v1-0": "wrapped-user-offset", + "f1-4": "current-time", + "f1-6": "current-time-wrapped", + "f1-10": "combined-offset", + "f0-3": "combined-offset-wrapped" + } + }, + + "(method 11 sync-info)": { + "vars": { + "v1-0": "period", + "f0-1": "period-float", + "f1-2": "current-time" + } + }, + + "(method 11 sync-info-paused)": { + "vars": { + "v1-0": "period", + "f1-0": "period-float", + "f0-1": "max-phase", + "f2-2": "current-time" + } + }, + + "(method 9 sync-info)": { + "args": ["obj", "max-val"], + "vars": { + "v1-0": "period", + "f0-1": "period-float", + "f1-2": "current-time" + } + }, + + "(method 13 sync-info)": { + "args": ["obj"], + "vars": { + "v1-0": "period", + "f1-0": "period-float", + "f2-2": "current-time", + "f0-1": "max-val", + "f0-2": "phase-out-of-2" + } + }, + + "(method 13 sync-info-eased)": { + "args": ["obj"], + "vars": { + "v1-0": "period", + "f1-0": "period-float", + "f0-1": "max-val", + "f2-2": "current-time", + "f0-2": "current-val", + "v1-2": "in-mirror?", + "f1-4": "tlo", + "f0-7": "eased-phase" + } + }, + + "(method 12 sync-info)": { + "args": ["obj", "max-out-val"], + "vars": { + "v1-0": "period", + "f1-0": "period-float", + "f0-1": "max-val", + "f2-2": "current-time", + "f0-2": "current-val" + } + }, + + "(method 12 sync-info-eased)": { + "args": ["obj", "max-out-val"] + }, + "(method 12 sync-info-paused)": { + "args": ["obj", "max-out-val"] + }, + + "(method 9 delayed-rand-float)": { + "args": ["obj", "min-tim", "max-time", "max-times-two"] + }, + + "(method 10 oscillating-float)": { + "args": ["obj", "target-offset"], + "vars": { "f0-3": "acc" } + }, + + "(method 9 oscillating-float)": { + "args": ["obj", "init-val", "accel", "max-vel", "damping"] + }, + + "(method 9 bouncing-float)": { + "args": [ + "obj", + "init-val", + "max-val", + "min-val", + "elast", + "accel", + "max-vel", + "damping" + ] + }, + + "(method 9 delayed-rand-vector)": { + "args": ["obj", "min-time", "max-time", "xz-range", "y-range"] + }, + + "(method 9 oscillating-vector)": { + "args": ["obj", "init-val", "accel", "max-vel", "damping"] + }, + + "(method 10 oscillating-vector)": { + "args": ["obj", "target-offset"], + "vars": { "f0-2": "vel" } + }, + + "(method 9 trajectory)": { + "args": ["obj", "time", "result"] + }, + + "(method 10 trajectory)": { + "args": ["obj", "time", "result"] + }, + + "(method 11 trajectory)": { + "args": ["obj", "from", "to", "duration", "grav"], + "vars": { "f0-3": "xz-vel" } + }, + + "(method 12 trajectory)": { + "args": ["obj", "from", "to", "xz-vel", "grav"], + "vars": { "f0-1": "duration" } + }, + + "(method 13 trajectory)": { + "args": ["obj", "from", "to", "y-vel", "grav"] + }, + + "(method 15 trajectory)": { + "vars":{ + "s5-0":"prev-pos", + "s4-0":"pos", + "s3-0":"num-segments", + "f0-1":"t-eval" + } + }, + + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/data/streamed_audio.cpp b/decompiler/data/streamed_audio.cpp new file mode 100644 index 0000000000..21375891c1 --- /dev/null +++ b/decompiler/data/streamed_audio.cpp @@ -0,0 +1,223 @@ + +#include "common/log/log.h" +#include "common/util/FileUtil.h" +#include "common/util/BinaryReader.h" +#include "common/audio/audio_formats.h" +#include "third-party/fmt/core.h" +#include "third-party/json.hpp" + +#include "streamed_audio.h" + +namespace decompiler { + +// number of bytes per "audio page" in the VAG directory file. +constexpr int AUDIO_PAGE_SIZE = 2048; + +// Swap endian of 32-bit value. +uint32_t swap32(uint32_t in) { + return ((in << 24) | ((in & 0xff00) << 8) | ((in & 0xff0000) >> 8) | (in >> 24)); +} + +/*! + * A processed version of the VAGDIR file containing a map from 8-char name to location in the + * WAD files. + */ +struct AudioDir { + struct Entry { + std::string name; + s64 start_byte = -1; + s64 end_byte = -1; + }; + + std::vector entries; + + void set_file_size(u64 size) { + if (!entries.empty()) { + entries.back().end_byte = size; + } + } + + int entry_count() const { return entries.size(); } + + void debug_print() const { + for (auto& e : entries) { + fmt::print("\"{}\" 0x{:07x} - 0x{:07x}\n", e.name, e.start_byte, e.end_byte); + } + } +}; + +/*! + * Read an entry from a WAD and return the binary data. + */ +std::vector read_entry(const AudioDir& dir, const std::vector& data, int entry_idx) { + const auto& entry = dir.entries.at(entry_idx); + assert(entry.end_byte > 0); + return std::vector(data.begin() + entry.start_byte, data.begin() + entry.end_byte); +} + +/*! + * Matches the format in file. + */ +struct VagFileHeader { + char magic[4]; + u32 version; + u32 zero; + u32 channel_size; + u32 sample_rate; + u32 z[3]; + char name[16]; + + VagFileHeader swapped_endian() const { + VagFileHeader result(*this); + result.version = swap32(result.version); + result.channel_size = swap32(result.channel_size); + result.sample_rate = swap32(result.sample_rate); + return result; + } + + void debug_print() { + char temp_name[17]; + memcpy(temp_name, name, 16); + temp_name[16] = '\0'; + fmt::print("{}{}{}{} v {} zero {} chan {} samp {} z {} {} {} name {}\n", magic[0], magic[1], + magic[2], magic[3], version, zero, channel_size, sample_rate, z[0], z[1], z[2], + temp_name); + } +}; + +/*! + * Read the DIR file into an AudioDir + */ +AudioDir read_audio_dir(const std::string& path) { + // matches the format in file. + struct DirEntry { + char name[8]; + u32 value; + }; + auto data = file_util::read_binary_file(path); + lg::info("Got {} bytes of audio dir.\n", data.size()); + auto reader = BinaryReader(data); + + u32 count = reader.read(); + u32 data_end = sizeof(u32) + sizeof(DirEntry) * count; + assert(data_end <= data.size()); + std::vector entries; + for (u32 i = 0; i < count; i++) { + entries.push_back(reader.read()); + } + + while (reader.bytes_left()) { + assert(reader.read() == 0); + } + + AudioDir result; + + assert(!entries.empty()); + for (size_t i = 0; i < entries.size(); i++) { + AudioDir::Entry e; + for (auto c : entries[i].name) { + // padded with spaces, no null terminator. + e.name.push_back(c); + e.start_byte = AUDIO_PAGE_SIZE * entries[i].value; + if (i + 1 < (entries.size())) { + e.end_byte = AUDIO_PAGE_SIZE * entries[i + 1].value; + } else { + e.end_byte = -1; + } + } + result.entries.push_back(e); + } + + return result; +} + +std::string remove_trailing_spaces(const std::string& in) { + auto short_name = in; + while (!short_name.empty() && short_name.back() == ' ') { + short_name.pop_back(); + } + return short_name; +} + +struct AudioFileInfo { + std::string filename; + double length_seconds; +}; + +AudioFileInfo process_audio_file(const std::vector& data, + const std::string& name, + const std::string& suffix) { + BinaryReader reader(data); + + auto header = reader.read(); + if (header.magic[0] == 'V') { + header = header.swapped_endian(); + } else { + assert(false); + } + header.debug_print(); + + for (int i = 0; i < 16; i++) { + assert(reader.read() == 0); + } + + std::vector decoded_samples = decode_adpcm(reader); + + while (reader.bytes_left()) { + assert(reader.read() == 0); + } + + auto file_name = fmt::format("{}_{}.wav", remove_trailing_spaces(name), suffix); + write_wave_file_mono(decoded_samples, header.sample_rate, + file_util::get_file_path({"assets", "streaming_audio", file_name})); + + std::string vag_filename; + for (int i = 0; i < 16; i++) { + if (header.name[i]) { + vag_filename.push_back(header.name[i]); + } + } + return {vag_filename, (double)decoded_samples.size() / header.sample_rate}; +} + +void process_streamed_audio(const std::string& dir, const std::vector& audio_files) { + auto dir_file_name = file_util::combine_path(dir, "VAGDIR.AYB"); + lg::info("Streaming audio: {}\n", dir_file_name); + file_util::create_dir_if_needed(file_util::get_file_path({"assets", "streaming_audio"})); + auto dir_data = read_audio_dir(file_util::get_file_path({"iso_data", dir_file_name})); + double audio_len = 0.f; + + std::vector langs; + std::vector> filename_data; + for (auto& e : dir_data.entries) { + std::vector placeholders = {remove_trailing_spaces(e.name)}; + for (size_t i = 0; i < audio_files.size(); i++) { + placeholders.push_back("????"); + } + filename_data.push_back(placeholders); + } + + for (size_t lang_id = 0; lang_id < audio_files.size(); lang_id++) { + auto& file = audio_files[lang_id]; + auto wad_data = file_util::read_binary_file(file_util::get_file_path({"iso_data", dir, file})); + auto suffix = std::filesystem::path(file).extension().u8string().substr(1); + langs.push_back(suffix); + dir_data.set_file_size(wad_data.size()); + for (int i = 3; i < dir_data.entry_count(); i++) { + auto audio_data = read_entry(dir_data, wad_data, i); + lg::info("File {}, total {:.2f} minutes", dir_data.entries.at(i).name, audio_len / 60.0); + auto info = process_audio_file(audio_data, dir_data.entries.at(i).name, suffix); + audio_len += info.length_seconds; + filename_data[i][lang_id + 1] = info.filename; + } + } + + nlohmann::json file_list; + file_list["names"] = filename_data; + file_list["languages"] = langs; + + file_util::write_text_file( + file_util::get_file_path({"assets", "streaming_audio", "file_list.txt"}), file_list.dump(2)); +} + +} // namespace decompiler diff --git a/decompiler/data/streamed_audio.h b/decompiler/data/streamed_audio.h new file mode 100644 index 0000000000..b98d47c4e7 --- /dev/null +++ b/decompiler/data/streamed_audio.h @@ -0,0 +1,8 @@ +#pragma once + +#include +#include + +namespace decompiler { +void process_streamed_audio(const std::string& dir, const std::vector& audio_files); +} \ No newline at end of file diff --git a/decompiler/main.cpp b/decompiler/main.cpp index a904a604dd..206251cffd 100644 --- a/decompiler/main.cpp +++ b/decompiler/main.cpp @@ -6,6 +6,7 @@ #include "config.h" #include "common/util/FileUtil.h" #include "common/versions.h" +#include "decompiler/data/streamed_audio.h" int main(int argc, char** argv) { using namespace decompiler; @@ -100,17 +101,27 @@ int main(int argc, char** argv) { if (config.process_game_text) { auto result = db.process_game_text_files(); - file_util::write_text_file(file_util::get_file_path({"assets", "game_text.txt"}), result); + if (!result.empty()) { + file_util::write_text_file(file_util::get_file_path({"assets", "game_text.txt"}), result); + } } if (config.process_tpages) { auto result = db.process_tpages(); - file_util::write_text_file(file_util::get_file_path({"assets", "tpage-dir.txt"}), result); + if (!result.empty()) { + file_util::write_text_file(file_util::get_file_path({"assets", "tpage-dir.txt"}), result); + } } if (config.process_game_count) { auto result = db.process_game_count_file(); - file_util::write_text_file(file_util::get_file_path({"assets", "game_count.txt"}), result); + if (!result.empty()) { + file_util::write_text_file(file_util::get_file_path({"assets", "game_count.txt"}), result); + } + } + + if (!config.audio_dir_file_name.empty()) { + process_streamed_audio(config.audio_dir_file_name, config.streamed_audio_file_names); } lg::info("Disassembly has completed successfully."); diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index 1065977707..b22ff380fb 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -379,6 +379,13 @@ bool DecompilerTypeSystem::tp_lca(TypeState* combined, const TypeState& add) { } } + bool diff = false; + auto new_type = tp_lca(combined->next_state_type, add.next_state_type, &diff); + if (diff) { + result = true; + combined->next_state_type = new_type; + } + return result; } @@ -407,6 +414,11 @@ int DecompilerTypeSystem::get_format_arg_count(const std::string& str) const { continue; } + // ~0k + if (i + 1 < str.length() && (str.at(i) == '0') && str.at(i + 1) == 'k') { + continue; + } + // ~2j if (i + 1 < str.length() && (str.at(i) == '2') && str.at(i + 1) == 'j') { continue; @@ -434,4 +446,21 @@ TypeSpec DecompilerTypeSystem::lookup_symbol_type(const std::string& name) const return kv->second; } } + +bool DecompilerTypeSystem::should_attempt_cast_simplify(const TypeSpec& expected, + const TypeSpec& actual) const { + if (expected == TypeSpec("meters") && actual == TypeSpec("float")) { + return true; + } + + if (expected == TypeSpec("seconds") && actual == TypeSpec("uint64")) { + return true; + } + + if (expected == TypeSpec("degrees") && actual == TypeSpec("float")) { + return true; + } + + return !ts.tc(expected, actual); +} } // namespace decompiler diff --git a/decompiler/util/DecompilerTypeSystem.h b/decompiler/util/DecompilerTypeSystem.h index ef5cfc05c8..03f2eb0639 100644 --- a/decompiler/util/DecompilerTypeSystem.h +++ b/decompiler/util/DecompilerTypeSystem.h @@ -6,7 +6,7 @@ namespace decompiler { class TP_Type; -struct TypeState; +class TypeState; class DecompilerTypeSystem { public: @@ -43,6 +43,7 @@ class DecompilerTypeSystem { int get_format_arg_count(const std::string& str) const; int get_format_arg_count(const TP_Type& type) const; TypeSpec lookup_symbol_type(const std::string& name) const; + bool should_attempt_cast_simplify(const TypeSpec& expected, const TypeSpec& actual) const; // todo - totally eliminate this. struct { diff --git a/decompiler/util/TP_Type.cpp b/decompiler/util/TP_Type.cpp index 5682efefb6..ffbe5f8909 100644 --- a/decompiler/util/TP_Type.cpp +++ b/decompiler/util/TP_Type.cpp @@ -67,8 +67,12 @@ std::string TP_Type::print() const { } case Kind::PCPYUD_BITFIELD: return fmt::format("", m_ts.print()); + case Kind::PCPYUD_BITFIELD_AND: + return fmt::format("", m_ts.print()); case Kind::LABEL_ADDR: return ""; + case Kind::ENTER_STATE_FUNCTION: + return ""; case Kind::INVALID: default: assert(false); @@ -119,7 +123,10 @@ bool TP_Type::operator==(const TP_Type& other) const { return m_int == other.m_int && m_ts == other.m_ts && m_pcpyud == other.m_pcpyud; case Kind::PCPYUD_BITFIELD: return m_pcpyud == other.m_pcpyud && m_ts == other.m_ts; + case Kind::PCPYUD_BITFIELD_AND: + return m_pcpyud == other.m_pcpyud && m_ts == other.m_ts; case Kind::LABEL_ADDR: + case Kind::ENTER_STATE_FUNCTION: return true; case Kind::INVALID: default: @@ -177,8 +184,13 @@ TypeSpec TP_Type::typespec() const { return TypeSpec("int"); // ideally this is never used. case Kind::PCPYUD_BITFIELD: return TypeSpec("int"); + case Kind::PCPYUD_BITFIELD_AND: + return TypeSpec("int"); case Kind::LABEL_ADDR: return TypeSpec("pointer"); // ? + case Kind::ENTER_STATE_FUNCTION: + // give a general function so we can't call it normally. + return TypeSpec("function"); case Kind::INVALID: default: assert(false); diff --git a/decompiler/util/TP_Type.h b/decompiler/util/TP_Type.h index 990cb93260..ce076cdb56 100644 --- a/decompiler/util/TP_Type.h +++ b/decompiler/util/TP_Type.h @@ -33,8 +33,10 @@ class TP_Type { VIRTUAL_METHOD, NON_VIRTUAL_METHOD, PCPYUD_BITFIELD, + PCPYUD_BITFIELD_AND, LEFT_SHIFTED_BITFIELD, // (bitfield << some-constant) LABEL_ADDR, + ENTER_STATE_FUNCTION, INVALID } kind = Kind::UNINITIALIZED; TP_Type() = default; @@ -62,7 +64,9 @@ class TP_Type { case Kind::NON_VIRTUAL_METHOD: case Kind::LEFT_SHIFTED_BITFIELD: case Kind::PCPYUD_BITFIELD: + case Kind::PCPYUD_BITFIELD_AND: case Kind::LABEL_ADDR: + case Kind::ENTER_STATE_FUNCTION: return false; case Kind::UNINITIALIZED: case Kind::OBJECT_NEW_METHOD: @@ -244,6 +248,20 @@ class TP_Type { return result; } + static TP_Type make_from_pcpyud_and_bitfield(const TypeSpec& ts) { + TP_Type result; + result.kind = Kind::PCPYUD_BITFIELD_AND; + result.m_ts = ts; + result.m_pcpyud = true; + return result; + } + + static TP_Type make_enter_state() { + TP_Type result; + result.kind = Kind::ENTER_STATE_FUNCTION; + return result; + } + static TP_Type make_label_addr() { TP_Type result; result.kind = Kind::LABEL_ADDR; @@ -296,7 +314,8 @@ class TP_Type { } const TypeSpec& get_bitfield_type() const { - assert(kind == Kind::LEFT_SHIFTED_BITFIELD || kind == Kind::PCPYUD_BITFIELD); + assert(kind == Kind::LEFT_SHIFTED_BITFIELD || kind == Kind::PCPYUD_BITFIELD || + kind == Kind::PCPYUD_BITFIELD_AND); return m_ts; } @@ -335,11 +354,13 @@ class TP_Type { int64_t m_extra_multiplier = 0; }; -struct TypeState { +class TypeState { + private: + public: + std::unordered_map spill_slots; TP_Type gpr_types[32]; TP_Type fpr_types[32]; - std::unordered_map spill_slots; - + TP_Type next_state_type; std::string print_gpr_masked(u32 mask) const; TP_Type& get(const Register& r) { switch (r.get_kind()) { diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index cc562faad8..bb037e9e0e 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -275,6 +275,150 @@ std::string print_def(const goos::Object& obj) { } return obj.print(); } + +/*! + * Start at start_byte, and find the location of the next label. + * Will only check labels that are in the given segment. + */ +int index_of_closest_following_label_in_segment(int start_byte, + int seg, + const std::vector& labels) { + int result_idx = -1; + int closest_byte = -1; + for (int i = 0; i < (int)labels.size(); i++) { + const auto& label = labels.at(i); + if (label.target_segment == seg) { + if (result_idx == -1) { + result_idx = i; + closest_byte = label.offset; + } else { + if (label.offset > start_byte && label.offset < closest_byte) { + result_idx = i; + closest_byte = label.offset; + } + } + } + } + return result_idx; +} + +/*! + * Attempt to decompile a reference to an inline array, without knowing the size. + */ +goos::Object decomp_ref_to_inline_array_guess_size( + const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const Field& data_field, + const std::vector>& all_words, + const LinkedObjectFile* file, + const TypeSpec& array_elt_type, + int stride) { + fmt::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); + + // verify that the field is the right type. + assert(data_field.type() == TypeSpec("inline-array", {array_elt_type})); + + // verify the stride matches the type system + auto elt_type_info = ts.lookup_type(array_elt_type); + assert(stride == align(elt_type_info->get_size_in_memory(), + elt_type_info->get_inline_array_stride_alignment())); + + // the input is the location of the data field. + // we expect that to be a label: + assert((field_location % 4) == 0); + auto pointer_to_data = words.at(field_location / 4); + assert(pointer_to_data.kind == LinkedWord::PTR); + + // the data shouldn't have any labels in the middle of it, so we can find the end of the array + // by searching for the label after the start label. + const auto& start_label = labels.at(pointer_to_data.label_id); + int end_label_idx = + index_of_closest_following_label_in_segment(start_label.offset, my_seg, labels); + assert(end_label_idx >= 0); + const auto& end_label = labels.at(end_label_idx); + fmt::print("Data is from {} to {}\n", start_label.name, end_label.name); + + // now we can figure out the size + int size_bytes = end_label.offset - start_label.offset; + int size_elts = size_bytes / stride; // 32 bytes per ocean-near-index + int leftover_bytes = size_bytes % stride; + fmt::print("Size is {} bytes: {} elts, {} left over\n", size_bytes, size_elts, leftover_bytes); + + // if we have leftover, should verify that its all zeros, or that it's the type pointer + // of the next basic in the data section. + // ex: + // .word + // .type + // L21: ; label some other basic + // + int padding_start = end_label.offset - leftover_bytes; + int padding_end = end_label.offset; + for (int pad_byte_idx = padding_start; pad_byte_idx < padding_end; pad_byte_idx++) { + auto& word = all_words.at(my_seg).at(pad_byte_idx / 4); + switch (word.kind) { + case LinkedWord::PLAIN_DATA: + assert(word.get_byte(pad_byte_idx) == 0); + break; + case LinkedWord::TYPE_PTR: + break; + default: + assert(false); + } + } + + // now disassemble: + std::vector array_def = {pretty_print::to_symbol( + fmt::format("new 'static 'inline-array {} {}", array_elt_type.print(), size_elts))}; + + for (int elt = 0; elt < size_elts; elt++) { + // for each element, create a fake temporary label at the start to identify it + DecompilerLabel fake_label; + fake_label.target_segment = my_seg; // same segment + fake_label.offset = start_label.offset + elt * stride; + array_def.push_back( + decompile_at_label(array_elt_type, fake_label, labels, all_words, ts, file)); + } + + // build into a list. + return pretty_print::build_list(array_def); +} + +/*! + * Decompile the data field of ocean-near-indices, which is an (inline-array ocean-near-index). + * This is like a C++ ocean_near_index*, meaning we don't know how long the array is. + * We know all the data in a ocean_near_index is just integers, so we can guess that the end + * of the array is just the location of the next label. + * There's a chance that this will include some padding in the array and make it too long, + * but there is no harm in that. + */ +goos::Object ocean_near_indices_decompile(const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const Field& data_field, + const std::vector>& all_words, + const LinkedObjectFile* file) { + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, + data_field, all_words, file, + TypeSpec("ocean-near-index"), 32); +} + +goos::Object ocean_mid_masks_decompile(const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const Field& data_field, + const std::vector>& all_words, + const LinkedObjectFile* file) { + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, + data_field, all_words, file, + TypeSpec("ocean-mid-mask"), 8); +} } // namespace goos::Object decompile_structure(const TypeSpec& type, @@ -325,11 +469,18 @@ goos::Object decompile_structure(const TypeSpec& type, // check alignment if (offset_location % 8) { - throw std::runtime_error(fmt::format( - "Tried to decompile a structure with type type {} (type offset {}) at label {}, but it has " - "alignment {}, which is not valid. {}", + std::string error = fmt::format( + "Decompiling a structure with type type {} (type offset {}) at label {}, but it has " + "alignment {}, which is not valid. This might be okay for a packed inline array, but " + "shouldn't happen for basics. {}", type_info->get_name(), type_info->get_offset(), label.name, (offset_location % 8), - (offset_location & 0b10) ? "Maybe it is actually a pair?" : "")); + (offset_location & 0b10) ? "Maybe it is actually a pair?" : ""); + + if (is_basic || !type_info->is_packed()) { + throw std::runtime_error(error); + } else { + // fmt::print("{}\n", error); + } } // check enough room @@ -448,11 +599,22 @@ goos::Object decompile_structure(const TypeSpec& type, fmt::format("Dynamic value field {} in static data type {} not yet implemented", field.name(), actual_type.print())); } else { - std::vector bytes_out; - for (int byte_idx = field_start; byte_idx < field_end; byte_idx++) { - bytes_out.push_back(obj_words.at(byte_idx / 4).get_byte(byte_idx % 4)); + if (field.name() == "data" && type.print() == "ocean-near-indices") { + // first, get the label: + field_defs_out.emplace_back( + field.name(), ocean_near_indices_decompile(obj_words, labels, label.target_segment, + field_start, ts, field, words, file)); + } else if (field.name() == "data" && type.print() == "ocean-mid-masks") { + field_defs_out.emplace_back( + field.name(), ocean_mid_masks_decompile(obj_words, labels, label.target_segment, + field_start, ts, field, words, file)); + } else { + std::vector bytes_out; + for (int byte_idx = field_start; byte_idx < field_end; byte_idx++) { + bytes_out.push_back(obj_words.at(byte_idx / 4).get_byte(byte_idx % 4)); + } + field_defs_out.emplace_back(field.name(), decompile_value(field.type(), bytes_out, ts)); } - field_defs_out.emplace_back(field.name(), decompile_value(field.type(), bytes_out, ts)); } } else { @@ -695,11 +857,35 @@ goos::Object decompile_value(const TypeSpec& type, } else { return pretty_print::to_symbol(fmt::format("{}", value)); } + } else if (type == TypeSpec("seconds")) { + assert(bytes.size() == 8); + u64 value; + memcpy(&value, bytes.data(), 8); + + // only rewrite if exact. + u64 seconds = value / TICKS_PER_SECOND; + if (seconds * TICKS_PER_SECOND == value) { + return pretty_print::to_symbol(fmt::format("(seconds {})", seconds)); + } + + return pretty_print::to_symbol(fmt::format("#x{:x}", value)); } else if (ts.tc(TypeSpec("uint64"), type)) { assert(bytes.size() == 8); u64 value; memcpy(&value, bytes.data(), 8); return pretty_print::to_symbol(fmt::format("#x{:x}", value)); + } else if (type == TypeSpec("meters")) { + assert(bytes.size() == 4); + float value; + memcpy(&value, bytes.data(), 4); + double meters = (double)value / METER_LENGTH; + return pretty_print::build_list("meters", pretty_print::float_representation(meters)); + } else if (type == TypeSpec("degrees")) { + assert(bytes.size() == 4); + float value; + memcpy(&value, bytes.data(), 4); + double degrees = (double)value / DEGREES_LENGTH; + return pretty_print::build_list("degrees", pretty_print::float_representation(degrees)); } else if (ts.tc(TypeSpec("float"), type)) { assert(bytes.size() == 4); float value; @@ -997,6 +1183,14 @@ std::optional> try_decompile_bitfield_from_int( auto name = decompile_int_enum_from_int(field.type(), ts, bitfield_value); def.enum_constant = fmt::format("({} {})", field.type().print(), name); } + + auto nested_bitfield_type = dynamic_cast(ts.lookup_type(field.type())); + if (nested_bitfield_type) { + BitFieldConstantDef::NestedField nested; + nested.field_type = field.type(); + nested.fields = *try_decompile_bitfield_from_int(field.type(), ts, bitfield_value, true); + def.nested_field = nested; + } result.push_back(def); } diff --git a/decompiler/util/data_decompile.h b/decompiler/util/data_decompile.h index 782f71c88a..7063c924dd 100644 --- a/decompiler/util/data_decompile.h +++ b/decompiler/util/data_decompile.h @@ -73,6 +73,13 @@ struct BitFieldConstantDef { u64 value = -1; std::optional enum_constant; std::string field_name; + + struct NestedField { + TypeSpec field_type; + std::vector fields; + }; + + std::optional nested_field; }; template diff --git a/docs/gh-pages-proj/src/config/progress.json b/docs/gh-pages-proj/src/config/progress.json index d58cd63ac3..3ee28e66b4 100644 --- a/docs/gh-pages-proj/src/config/progress.json +++ b/docs/gh-pages-proj/src/config/progress.json @@ -1,7 +1,7 @@ { "jak1": { "locPercentage": { - "value": 103209, + "value": 117858, "label": "Lines of Code" } } diff --git a/docs/index.html b/docs/index.html index cf2f882df0..da5feb32dd 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.93743c22.js b/docs/js/about.93743c22.js new file mode 100644 index 0000000000..2334b95a5e --- /dev/null +++ b/docs/js/about.93743c22.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{"02e2":function(t,e,n){},"0481":function(t,e,n){"use strict";var i=n("23e7"),r=n("a2bf"),a=n("7b0b"),s=n("50c4"),o=n("a691"),c=n("65f0");i({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=a(this),n=s(e.length),i=c(e,0);return i.length=r(i,e,e,n,0,void 0===t?1:o(t)),i}})},"0bc6":function(t,e,n){},"14dc":function(t,e,n){"use strict";n("02e2")},"20f6":function(t,e,n){},"25a8":function(t,e,n){},"36a7":function(t,e,n){},4804:function(t,e,n){},"4b85":function(t,e,n){},"4ec9":function(t,e,n){"use strict";var i=n("6d61"),r=n("6566");t.exports=i("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r)},"615b":function(t,e,n){},6566:function(t,e,n){"use strict";var i=n("9bf2").f,r=n("7c73"),a=n("e2cc"),s=n("0366"),o=n("19aa"),c=n("2266"),l=n("7dd0"),u=n("2626"),h=n("83ab"),d=n("f183").fastKey,f=n("69f3"),p=f.set,v=f.getterFor;t.exports={getConstructor:function(t,e,n,l){var u=t((function(t,i){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!=i&&c(i,t[l],{that:t,AS_ENTRIES:n})})),f=v(e),g=function(t,e,n){var i,r,a=f(t),s=m(t,e);return s?s.value=n:(a.last=s={index:r=d(e,!0),key:e,value:n,previous:i=a.last,next:void 0,removed:!1},a.first||(a.first=s),i&&(i.next=s),h?a.size++:t.size++,"F"!==r&&(a.index[r]=s)),t},m=function(t,e){var n,i=f(t),r=d(e);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==e)return n};return a(u.prototype,{clear:function(){var t=this,e=f(t),n=e.index,i=e.first;while(i)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete n[i.index],i=i.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,n=f(e),i=m(e,t);if(i){var r=i.next,a=i.previous;delete n.index[i.index],i.removed=!0,a&&(a.next=r),r&&(r.previous=a),n.first==i&&(n.first=r),n.last==i&&(n.last=a),h?n.size--:e.size--}return!!i},forEach:function(t){var e,n=f(this),i=s(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:n.first){i(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),a(u.prototype,n?{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&&i(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(t,e,n){var i=e+" Iterator",r=v(e),a=v(i);l(t,e,(function(t,e){p(this,{type:i,target:t,state:r(t),kind:e,last:void 0})}),(function(){var t=a(this),e=t.kind,n=t.last;while(n&&n.removed)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(e)}}},"6d61":function(t,e,n){"use strict";var i=n("23e7"),r=n("da84"),a=n("94ca"),s=n("6eeb"),o=n("f183"),c=n("2266"),l=n("19aa"),u=n("861d"),h=n("d039"),d=n("1c7e"),f=n("d44e"),p=n("7156");t.exports=function(t,e,n){var v=-1!==t.indexOf("Map"),g=-1!==t.indexOf("Weak"),m=v?"set":"add",b=r[t],y=b&&b.prototype,x=b,_={},w=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,n){return e.call(this,0===t?0:t,n),this})},S=a(t,"function"!=typeof b||!(g||y.forEach&&!h((function(){(new b).entries().next()}))));if(S)x=n.getConstructor(e,t,v,m),o.enable();else if(a(t,!0)){var j=new x,O=j[m](g?{}:-0,1)!=j,C=h((function(){j.has(1)})),k=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)}));k||(x=e((function(e,n){l(e,x,t);var i=p(new b,e,x);return void 0!=n&&c(n,i[m],{that:i,AS_ENTRIES:v}),i})),x.prototype=y,y.constructor=x),(C||L)&&(w("delete"),w("has"),v&&w("get")),(L||O)&&w(m),g&&y.clear&&delete y.clear}return _[t]=x,i({global:!0,forced:x!=b},_),f(x,t),g||n.setStrong(x,t,v),x}},"6ece":function(t,e,n){},7435:function(t,e,n){},"86cc":function(t,e,n){},"87cf":function(t,e,n){t.exports=n.p+"img/logo-text-colored.5cda006b.png"},"8a79":function(t,e,n){"use strict";var i=n("23e7"),r=n("06cf").f,a=n("50c4"),s=n("577e"),o=n("5a34"),c=n("1d80"),l=n("ab13"),u=n("c430"),h="".endsWith,d=Math.min,f=l("endsWith"),p=!u&&!f&&!!function(){var t=r(String.prototype,"endsWith");return t&&!t.writable}();i({target:"String",proto:!0,forced:!p&&!f},{endsWith:function(t){var e=s(c(this));o(t);var n=arguments.length>1?arguments[1]:void 0,i=a(e.length),r=void 0===n?i:d(a(n),i),l=s(t);return h?h.call(e,l,r):e.slice(r-l.length,r)===l}})},"8d4f":function(t,e,n){},"8efc":function(t,e,n){},"96cf":function(t,e,n){var i=function(t){"use strict";var e,n=Object.prototype,i=n.hasOwnProperty,r="function"===typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",s=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch($){c=function(t,e,n){return t[e]=n}}function l(t,e,n,i){var r=e&&e.prototype instanceof g?e:g,a=Object.create(r.prototype),s=new B(i||[]);return a._invoke=O(t,n,s),a}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}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 x=Object.getPrototypeOf,_=x&&x(x(E([])));_&&_!==n&&i.call(_,a)&&(y=_);var w=b.prototype=g.prototype=Object.create(y);function S(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function j(t,e){function n(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&&i.call(h,"__await")?e.resolve(h.__await).then((function(t){n("next",t,s,o)}),(function(t){n("throw",t,s,o)})):e.resolve(h).then((function(t){l.value=t,s(l)}),(function(t){return n("throw",t,s,o)}))}o(c.arg)}var r;function a(t,i){function a(){return new e((function(e,r){n(t,i,e,r)}))}return r=r?r.then(a,a):a()}this._invoke=a}function O(t,e,n){var i=h;return function(r,a){if(i===f)throw new Error("Generator is already running");if(i===p){if("throw"===r)throw a;return z()}n.method=r,n.arg=a;while(1){var s=n.delegate;if(s){var o=C(s,n);if(o){if(o===v)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===h)throw i=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var c=u(t,e,n);if("normal"===c.type){if(i=n.done?p:d,c.arg===v)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(i=p,n.method="throw",n.arg=c.arg)}}}function C(t,n){var i=t.iterator[n.method];if(i===e){if(n.delegate=null,"throw"===n.method){if(t.iterator["return"]&&(n.method="return",n.arg=e,C(t,n),"throw"===n.method))return v;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var r=u(i,t.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,v;var a=r.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function k(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(k,this),this.reset(!0)}function E(t){if(t){var n=t[a];if(n)return n.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var r=-1,s=function n(){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=i.call(s,"catchLoc"),l=i.call(s,"finallyLoc");if(c&&l){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),L(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;L(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,i){return this.delegate={iterator:E(t),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=i}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=i:Function("r","regeneratorRuntime = r")(i)}},9911:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("link")},{link:function(t){return r(this,"a","href",t)}})},a2bf:function(t,e,n){"use strict";var i=n("e8b5"),r=n("50c4"),a=n("0366"),s=function(t,e,n,o,c,l,u,h){var d,f=c,p=0,v=!!u&&a(u,h,3);while(p0&&i(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,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("v-container",{attrs:{fluid:""}},[i("v-row",{staticClass:"bg-img",attrs:{justify:"center",align:"center"}},[i("v-col",{attrs:{cols:"12",align:"center"}},[i("v-img",{attrs:{"max-height":"150","max-width":"250",src:n("87cf")}}),i("br"),i("h4",[t._v(" Reviving the Language that Brought us the Jak & Daxter Series ")]),i("br"),i("v-row",{attrs:{justify:"center"}},[i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"#project-status",rounded:"",color:"primary"}},[i("v-icon",[t._v("mdi-calendar-check")]),t._v(" Project Status ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{rounded:"",color:"secondary",href:"#recent-updates"}},[i("v-icon",[t._v("mdi-update")]),t._v(" Recent Updates ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"/jak-project/api-docs.html",target:"_blank",rounded:"",color:"deep-purple"}},[i("v-icon",[t._v("mdi-file-document")]),t._v(" Documentation ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"https://github.com/water111/jak-project",target:"_blank",rounded:"",color:"accent"}},[i("v-icon",[t._v("mdi-git")]),t._v(" Contribute ")],1)],1)],1)],1)],1),i("v-row",[i("v-container",[i("v-row",{staticStyle:{"margin-top":"3em"},attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"project-status"}},[t._v(" Project Status ")])])],1),i("v-row",{attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h2",{staticClass:"orange--text text--lighten-3"},[t._v("Jak 1 - Black Label")])])],1),i("v-row",{attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{cols:"10"}},[i("v-subheader",[t._v("Decompilation")]),i("v-progress-linear",{attrs:{color:"teal","buffer-value":"0",value:t.jak1BlackLabelStatus.decompDone,stream:"",height:"25"}},[t._v(" "+t._s(t.jak1BlackLabelStatus.decompLabel)+" - "+t._s(t.jak1BlackLabelStatus.decompDone)+"% ")])],1)],1),i("v-row",{staticStyle:{"margin-top":"5em"},attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"recent-updates"}},[t._v(" Recent Updates ")])])],1),i("v-row",{staticStyle:{"margin-bottom":"10em"},attrs:{justify:"center"}},t._l(t.recentPRs,(function(e,n){return i("v-col",{key:"pr"-n,attrs:{cols:"4"}},[i("v-card",[i("v-card-text",{staticStyle:{"overflow-y":"auto",height:"300px"}},[i("p",{staticClass:"text-h5 orange--text text--lighten-3"},[t._v(" "+t._s(e.title)+" ")]),i("p",[t._v(" "+t._s(e.user.login)+" ")]),i("div",{staticClass:"text--primary"},[i("pre",{staticClass:"wrapped-pre"},[t._v(t._s(e.body))])])]),i("v-card-actions",[i("v-btn",{attrs:{text:"",color:"accent",href:e.html_url,target:"_blank"}},[t._v(" View Change ")])],1)],1)],1)})),1)],1)],1)],1)},r=[];n("d3b7");function a(t,e,n,i,r,a,s){try{var o=t[a](s),c=o.value}catch(l){return void n(l)}o.done?e(c):Promise.resolve(c).then(i,r)}function s(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var s=t.apply(e,n);function o(t){a(s,i,r,o,c,"next",t)}function c(t){a(s,i,r,o,c,"throw",t)}o(void 0)}))}}n("fb6a"),n("96cf");var o=n("f5f2"),c=o,l={name:"Home",components:{},data:function(){return{recentPRs:[],jak1BlackLabelStatus:{decompDone:c.jak1.locPercentage.value/75e4*100,decompLabel:c.jak1.locPercentage.label}}},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,n,i,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(n=t.sent,i=9,r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"string"===typeof e.style?(Object(_["b"])("style must be an object",this),e):"string"===typeof e.class?(Object(_["b"])("class must be an object",this),e):(Object(w["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(x["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(_["b"])("style must be an object",this),e;if("string"===typeof e.class)return Object(_["b"])("class must be an object",this),e;if(Object(w["d"])(t))e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{color:"".concat(t),"caret-color":"".concat(t)});else if(t){var n=t.toString().trim().split(" ",2),i=Object(v["a"])(n,2),r=i[0],a=i[1];e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(x["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(x["a"])({},"elevation-".concat(this.elevation),!0)}}}),O=n("80d2"),C=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),n=Object(O["d"])(this.minHeight),i=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),n&&(t.minHeight=n),i&&(t.minWidth=i),r&&(t.maxHeight=r),a&&(t.maxWidth=a),s&&(t.width=s),t}}}),k=(n("a4d3"),n("e01a"),n("d28b"),n("3ca3"),n("ddb0"),n("06c5"));function L(t,e){var n="undefined"!==typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=Object(k["a"])(t))||e&&t&&"number"===typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},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(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){o=!0,a=t},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(o)throw a}}}}n("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 n,i=e.split(" "),r=L(i);try{for(r.s();!(n=r.n()).done;){var a=n.value;t.push("rounded-".concat(a))}}catch(s){r.e(s)}finally{r.f()}}else e&&t.push("rounded");return t.length>0?Object(x["a"])({},t.join(" "),!0):{}}}}),E=n("7560"),z=n("58df"),$=Object(z["a"])(y,S,j,C,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=$;n("99af"),n("8d4f");function N(t,e){if("undefined"!==typeof window&&"IntersectionObserver"in window){var n=e.modifiers||{},i=e.value,r="object"===Object(p["a"])(i)?i:{handler:i,options:{}},a=r.handler,s=r.options,o=new IntersectionObserver((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length>1?arguments[1]:void 0;if(t._observe){var r=e.some((function(t){return t.isIntersecting}));!a||n.quiet&&!t._observe.init||n.once&&!r&&t._observe.init||a(e,i,r),r&&n.once?P(t):t._observe.init=!0}}),s);t._observe={init:!1,observer:o},o.observe(t)}}function P(t){t._observe&&(t._observe.observer.unobserve(t),delete t._observe)}var R={inserted:N,unbind:P},V=R,I=S.extend({name:"v-progress-circular",directives:{intersect:V},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,n){this.isVisible=n}},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()])}}),A=I;function W(t,e){return function(){return Object(_["c"])("The ".concat(t," component must be used inside a ").concat(e))}}function D(t,e,n){var i=e&&n?{register:W(e,n),unregister:W(e,n)}:null;return m["a"].extend({name:"registrable-inject",inject:Object(x["a"])({},t,{default:i})})}function F(t,e,n){return D(t,e,n).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(x["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")}}})}F("itemGroup");function H(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"input";return m["a"].extend({name:"toggleable",model:{prop:e,event:n},props:Object(x["a"])({},e,{required:!1}),data:function(){return{isActive:!!this[e]}},watch:(t={},Object(x["a"])(t,e,(function(t){this.isActive=!!t})),Object(x["a"])(t,"isActive",(function(t){!!t!==this[e]&&this.$emit(n,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=(n("9911"),n("5319"),n("b0c0"),n("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 n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=0,r=0;if(!Q(t)){var a=e.getBoundingClientRect(),s=U(t)?t.touches[t.touches.length-1]:t;i=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=n.center?o:o+Math.sqrt(Math.pow(i-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=n.center?l:"".concat(i-o,"px"),d=n.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 n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e._ripple&&e._ripple.enabled){var i=document.createElement("span"),r=document.createElement("span");i.appendChild(r),i.className="v-ripple__container",n.class&&(i.className+=" ".concat(n.class));var a=Z(t,e,n),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(i);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 n=e[e.length-1];if(!n.dataset.isHiding){n.dataset.isHiding="true";var i=performance.now()-Number(n.dataset.activated),r=Math.max(250-i,0);setTimeout((function(){n.classList.remove("v-ripple__animation--in"),n.classList.add("v-ripple__animation--out"),K(n,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),n.parentNode&&t.removeChild(n.parentNode)}),300)}),r)}}}}};function et(t){return"undefined"===typeof t||!!t}function nt(t){var e={},n=t.currentTarget;if(n&&n._ripple&&!n._ripple.touched&&!t[J]){if(t[J]=!0,U(t))n._ripple.touched=!0,n._ripple.isTouch=!0;else if(n._ripple.isTouch)return;if(e.center=n._ripple.centered||Q(t),n._ripple.class&&(e.class=n._ripple.class),U(t)){if(n._ripple.showTimerCommit)return;n._ripple.showTimerCommit=function(){tt.show(t,n,e)},n._ripple.showTimer=window.setTimeout((function(){n&&n._ripple&&n._ripple.showTimerCommit&&(n._ripple.showTimerCommit(),n._ripple.showTimerCommit=null)}),Y)}else tt.show(t,n,e)}}function it(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(){it(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,nt(t))}function ot(t){at=!1,it(t)}function ct(t){!0===at&&(at=!1,it(t))}function lt(t,e,n){var i=et(e.value);i||tt.hide(t),t._ripple=t._ripple||{},t._ripple.enabled=i;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),i&&!n?(t.addEventListener("touchstart",nt,{passive:!0}),t.addEventListener("touchend",it,{passive:!0}),t.addEventListener("touchmove",rt,{passive:!0}),t.addEventListener("touchcancel",it),t.addEventListener("mousedown",nt),t.addEventListener("mouseup",it),t.addEventListener("mouseleave",it),t.addEventListener("keydown",st),t.addEventListener("keyup",ot),t.addEventListener("blur",ct),t.addEventListener("dragstart",it,{passive:!0})):!i&&n&&ut(t)}function ut(t){t.removeEventListener("mousedown",nt),t.removeEventListener("touchstart",nt),t.removeEventListener("touchend",it),t.removeEventListener("touchmove",rt),t.removeEventListener("touchcancel",it),t.removeEventListener("mouseup",it),t.removeEventListener("mouseleave",it),t.removeEventListener("keydown",st),t.removeEventListener("keyup",ot),t.removeEventListener("dragstart",it),t.removeEventListener("blur",ct)}function ht(t,e,n){lt(t,e,!1)}function dt(t){delete t._ripple,ut(t)}function ft(t,e){if(e.value!==e.oldValue){var n=et(e.oldValue);lt(t,e,n)}}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,n=this.exact,i=(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(x["a"])(t,this.to?"nativeOn":"on",Object(g["a"])(Object(g["a"])({},this.$listeners),{},{click:this.click})),Object(x["a"])(t,"ref","link"),t);if("undefined"===typeof this.exact&&(n="/"===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(i.props,{to:this.to,exact:n,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&&(i.attrs.href=this.href);return this.target&&(i.attrs.target=this.target),{tag:e,data:i}},onRouteChange:function(){var t=this;if(this.to&&this.$refs.link&&this.$route){var e="".concat(this.activeClass," ").concat(this.proxyClass||"").trim(),n="_vnode.data.class.".concat(e);this.$nextTick((function(){Object(O["h"])(t.$refs.link,n)&&t.toggle()}))}},toggle:function(){}}}),mt=(n("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,F("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 n=Object(v["a"])(e,2),i=n[0],r=n[1];t.$attrs.hasOwnProperty(i)&&Object(_["a"])(i,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(A,{props:{indeterminate:!0,size:23,width:2}})])}},render:function(t){var e=[this.genContent(),this.loading&&this.genLoader()],n=this.generateRouteLink(),i=n.tag,r=n.data,a=this.hasBg?this.setBackgroundColor:this.setTextColor;return"button"===i&&(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(i,this.disabled?r:a(this.color,r),e)}}),xt=(n("0481"),n("615b"),n("6ece"),n("b64b"),{styleList:/;(?![^(]*\))/g,styleProp:/:(.*)/});function _t(t){var e,n={},i=L(t.split(xt.styleList));try{for(i.s();!(e=i.n()).done;){var r=e.value,a=r.split(xt.styleProp),s=Object(v["a"])(a,2),o=s[0],c=s[1];o=o.trim(),o&&("string"===typeof c&&(c=c.trim()),n[Object(O["a"])(o)]=c)}}catch(l){i.e(l)}finally{i.f()}return n}function wt(){var t,e={},n=arguments.length;while(n--)for(var i=0,r=Object.keys(arguments[n]);i0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length,i=new Array(n>1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:"top center 0",n=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:n},origin:{type:String,default:e}},render:function(e,n){var i="transition".concat(n.props.group?"-group":""),r={props:{name:t,mode:n.props.mode},on:{beforeEnter:function(t){t.style.transformOrigin=n.props.origin,t.style.webkitTransformOrigin=n.props.origin}}};return n.props.leaveAbsolute&&(r.on.leave=Ct(r.on.leave,(function(t){var e=t.offsetTop,n=t.offsetLeft,i=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=n+"px",t.style.width=i+"px",t.style.height=r+"px"})),r.on.afterLeave=Ct(r.on.afterLeave,(function(t){if(t&&t._transitionInitialStyles){var e=t._transitionInitialStyles,n=e.position,i=e.top,r=e.left,a=e.width,s=e.height;delete t._transitionInitialStyles,t.style.position=n||"",t.style.top=i||"",t.style.left=r||"",t.style.width=a||"",t.style.height=s||""}}))),n.props.hideOnLeave&&(r.on.leave=Ct(r.on.leave,(function(t){t._initialDisplay=t.style.display,t.style.display="none"})),r.on.afterLeave=Ct(r.on.afterLeave,(function(t){t&&(t.style.display=t._initialDisplay||"")}))),e(i,wt(n.data,r),n.children)}}}function Lt(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"in-out";return{name:t,functional:!0,props:{mode:{type:String,default:n}},render:function(n,i){return n("transition",wt(i.data,{props:{name:t},on:e}),i.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],n=e?"width":"height",i="offset".concat(Object(O["o"])(n));return{beforeEnter:function(t){t._parent=t.parentNode,t._initialStyle=Object(x["a"])({transition:t.style.transition,overflow:t.style.overflow},n,t.style[n])},enter:function(e){var r=e._initialStyle;e.style.setProperty("transition","none","important"),e.style.overflow="hidden";var a="".concat(e[i],"px");e.style[n]="0",e.offsetHeight,e.style.transition=r.transition,t&&e._parent&&e._parent.classList.add(t),requestAnimationFrame((function(){e.style[n]=a}))},afterEnter:a,enterCancelled:a,leave:function(t){t._initialStyle=Object(x["a"])({transition:"",overflow:t.style.overflow},n,t.style[n]),t.style.overflow="hidden",t.style[n]="".concat(t[i],"px"),t.offsetHeight,requestAnimationFrame((function(){return t.style[n]="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[n];t.style.overflow=t._initialStyle.overflow,null!=e&&(t.style[n]=e),delete t._initialStyle}},Et=(kt("carousel-transition"),kt("carousel-reverse-transition"),kt("tab-transition"),kt("tab-reverse-transition"),kt("menu-transition"),kt("fab-transition","center center","out-in"),kt("dialog-transition"),kt("dialog-bottom-transition"),kt("dialog-top-transition"),kt("fade-transition")),zt=(kt("scale-transition"),kt("scroll-x-transition"),kt("scroll-x-reverse-transition"),kt("scroll-y-transition"),kt("scroll-y-reverse-transition"),kt("slide-x-transition"));kt("slide-x-reverse-transition"),kt("slide-y-transition"),kt("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(x["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(x["a"])({},t,(function(t){this.internalLazyValue=t}))})}var Tt=$t(),Nt=Tt,Pt=Object(z["a"])(S,q(["absolute","fixed","top","bottom"]),Nt,E["a"]),Rt=Pt.extend({name:"v-progress-linear",directives:{intersect:V},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(x["a"])(t,this.isReversed?"right":"left",Object(O["d"])(this.normalizedValue,"%")),Object(x["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(x["a"])({},t,!0)}))},onClick:function(t){if(this.reactive){var e=this.$el.getBoundingClientRect(),n=e.width;this.internalValue=t.offsetX/n*100}},onObserve:function(t,e,n){this.isVisible=n},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()])}}),Vt=Rt,It=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(Vt,{props:{absolute:!0,color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,height:this.loaderHeight,indeterminate:!0}})}}}),At=Object(z["a"])(It,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=It.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(),n=e.tag,i=e.data;return i.style=this.styles,this.isClickable&&(i.attrs=i.attrs||{},i.attrs.tabindex=0),t(n,this.setBackgroundColor(this.color,i),[this.genProgress(),this.$slots.default])}}),Wt=Object(O["e"])("v-card__actions"),Dt=(Object(O["e"])("v-card__subtitle"),Object(O["e"])("v-card__text")),Ft=(Object(O["e"])("v-card__title"),n("4ec9"),n("159b"),n("2ca0"),n("4b85"),["sm","md","lg","xl"]),Ht=function(){return Ft.reduce((function(t,e){return t[e]={type:[Boolean,String,Number],default:!1},t}),{})}(),Mt=function(){return Ft.reduce((function(t,e){return t["offset"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),qt=function(){return Ft.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,n){var i=t;if(null!=n&&!1!==n){if(e){var r=e.replace(t,"");i+="-".concat(r)}return"col"!==t||""!==n&&!0!==n?(i+="-".concat(n),i.toLowerCase()):i.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 n=e.props,i=e.data,r=e.children,a=(e.parent,"");for(var s in n)a+=String(n[s]);var o=Yt.get(a);return o||function(){var t,e;for(e in o=[],Gt)Gt[e].forEach((function(t){var i=n[t],r=Jt(e,t,i);r&&o.push(r)}));var i=o.some((function(t){return t.startsWith("col-")}));o.push((t={col:!i||!n.cols},Object(x["a"])(t,"col-".concat(n.cols),n.cols),Object(x["a"])(t,"offset-".concat(n.offset),n.offset),Object(x["a"])(t,"order-".concat(n.order),n.order),Object(x["a"])(t,"align-self-".concat(n.alignSelf),n.alignSelf),t)),Yt.set(a,o)}(),t(n.tag,wt(i,{class:o}),r)}});n("4de4"),n("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,n){var i=n.props,r=n.data,a=n.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 i.id&&(r.domProps=r.domProps||{},r.domProps.id=i.id),e(i.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 n,i=e.props,r=e.data,a=e.children,s=r.attrs;return s&&(r.attrs={},n=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}))),i.id&&(r.domProps=r.domProps||{},r.domProps.id=i.id),t(i.tag,wt(r,{staticClass:"container",class:Array({"container--fluid":i.fluid}).concat(n||[])}),a)}});n("2532"),n("7db0"),n("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,S,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 n=[],i=this.getDefaultData(),r="material-icons",a=t.indexOf("-"),s=a<=-1;s?n.push(t):(r=t.slice(0,a),Zt(r)&&(r="")),i.class[r]=!0,i.class[t]=!s;var o=this.getSize();return o&&(i.style={fontSize:o}),this.applyColors(i),e(this.hasClickListener?"button":this.tag,i,n)},renderSvgIcon:function(t,e){var n={class:"v-icon__svg",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":!0}},i=this.getSize();return i&&(n.style={fontSize:i,height:i,width:i}),e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e("svg",n,[e("path",{attrs:{d:t}})])])},renderSvgIconComponent:function(t,e){var n={class:{"v-icon__component":!0}},i=this.getSize();i&&(n.style={fontSize:i,height:i,width:i}),this.applyColors(n);var r=t.component;return n.props=t.props,n.nativeOn=n.on,e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e(r,n)])}},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)}}),ne=m["a"].extend({name:"v-icon",$_wrapperFor:ee,functional:!0,render:function(t,e){var n=e.data,i=e.children,r="";return n.domProps&&(r=n.domProps.textContent||n.domProps.innerHTML||r,delete n.domProps.textContent,delete n.domProps.innerHTML),t(ee,n,r?[r]:i)}}),ie=(n("8a79"),n("8efc"),n("36a7"),Object(z["a"])(C).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=ie,ae="undefined"!==typeof window&&"IntersectionObserver"in window,se=Object(z["a"])(re,E["a"]).extend({name:"v-img",directives:{intersect:V},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 n=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"}},[n]):n}},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,n){if(!ae||n||this.eager){if(this.normalisedSrc.lazySrc){var i=new Image;i.src=this.normalisedSrc.lazySrc,this.pollForSize(i,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(_["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,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,i=function i(){var r=t.naturalHeight,a=t.naturalWidth;r||a?(e.naturalWidth=a,e.calculatedAspectRatio=a/r):t.complete||!e.isLoading||e.hasError||null==n||setTimeout(i,n)};i()},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),n=wt(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,n,e.children)}}),oe=["sm","md","lg","xl"],ce=["start","end","center"];function le(t,e){return oe.reduce((function(n,i){return n[t+Object(O["o"])(i)]=e(),n}),{})}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,n){var i=me[t];if(null!=n){if(e){var r=e.replace(t,"");i+="-".concat(r)}return i+="-".concat(n),i.toLowerCase()}}var ye=new Map,xe=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 n=e.props,i=e.data,r=e.children,a="";for(var s in n)a+=String(n[s]);var o=ye.get(a);return o||function(){var t,e;for(e in o=[],ge)ge[e].forEach((function(t){var i=n[t],r=be(e,t,i);r&&o.push(r)}));o.push((t={"no-gutters":n.noGutters,"row--dense":n.dense},Object(x["a"])(t,"align-".concat(n.align),n.align),Object(x["a"])(t,"justify-".concat(n.justify),n.justify),Object(x["a"])(t,"align-content-".concat(n.alignContent),n.alignContent),t)),ye.set(a,o)}(),t(n.tag,wt(i,{staticClass:"row",class:o}),r)}}),_e=(n("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)}})),we=Object(h["a"])(u,i,r,!1,null,"7ed77054",null);e["default"]=we.exports;f()(we,{VBtn:yt,VCard:At,VCardActions:Wt,VCardText:Dt,VCol:Xt,VContainer:Qt,VIcon:ne,VImg:se,VProgressLinear:Rt,VRow:xe,VSubheader:_e})},c7cd:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("fixed")},{fixed:function(){return r(this,"tt","","")}})},c96a:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("small")},{small:function(){return r(this,"small","","")}})},f5f2:function(t){t.exports=JSON.parse('{"jak1":{"locPercentage":{"value":117858,"label":"Lines of Code"}}}')}}]); +//# sourceMappingURL=about.93743c22.js.map \ No newline at end of file diff --git a/docs/js/about.93743c22.js.map b/docs/js/about.93743c22.js.map new file mode 100644 index 0000000000..01933f5f58 --- /dev/null +++ b/docs/js/about.93743c22.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./src/views/Home.vue?7177","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:///./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?2dee","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","decompDone","_s","decompLabel","_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.93743c22.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","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=7ed77054&scoped=true&lang=css&\"","'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","/**\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\":\"teal\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.decompDone,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" \"+_vm._s(_vm.jak1BlackLabelStatus.decompLabel)+\" - \"+_vm._s(_vm.jak1BlackLabelStatus.decompDone)+\"% \")])],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=7ed77054&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=7ed77054&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 \"7ed77054\",\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/about.c7b7de46.js b/docs/js/about.c7b7de46.js deleted file mode 100644 index 906ebb2b46..0000000000 --- a/docs/js/about.c7b7de46.js +++ /dev/null @@ -1,2 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{"02e2":function(t,e,n){},"0481":function(t,e,n){"use strict";var i=n("23e7"),r=n("a2bf"),a=n("7b0b"),s=n("50c4"),o=n("a691"),c=n("65f0");i({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=a(this),n=s(e.length),i=c(e,0);return i.length=r(i,e,e,n,0,void 0===t?1:o(t)),i}})},"0bc6":function(t,e,n){},"14dc":function(t,e,n){"use strict";n("02e2")},"20f6":function(t,e,n){},"25a8":function(t,e,n){},"36a7":function(t,e,n){},4804:function(t,e,n){},"4b85":function(t,e,n){},"4ec9":function(t,e,n){"use strict";var i=n("6d61"),r=n("6566");t.exports=i("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r)},"615b":function(t,e,n){},6566:function(t,e,n){"use strict";var i=n("9bf2").f,r=n("7c73"),a=n("e2cc"),s=n("0366"),o=n("19aa"),c=n("2266"),l=n("7dd0"),u=n("2626"),h=n("83ab"),d=n("f183").fastKey,f=n("69f3"),p=f.set,v=f.getterFor;t.exports={getConstructor:function(t,e,n,l){var u=t((function(t,i){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!=i&&c(i,t[l],{that:t,AS_ENTRIES:n})})),f=v(e),g=function(t,e,n){var i,r,a=f(t),s=m(t,e);return s?s.value=n:(a.last=s={index:r=d(e,!0),key:e,value:n,previous:i=a.last,next:void 0,removed:!1},a.first||(a.first=s),i&&(i.next=s),h?a.size++:t.size++,"F"!==r&&(a.index[r]=s)),t},m=function(t,e){var n,i=f(t),r=d(e);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==e)return n};return a(u.prototype,{clear:function(){var t=this,e=f(t),n=e.index,i=e.first;while(i)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete n[i.index],i=i.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,n=f(e),i=m(e,t);if(i){var r=i.next,a=i.previous;delete n.index[i.index],i.removed=!0,a&&(a.next=r),r&&(r.previous=a),n.first==i&&(n.first=r),n.last==i&&(n.last=a),h?n.size--:e.size--}return!!i},forEach:function(t){var e,n=f(this),i=s(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:n.first){i(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),a(u.prototype,n?{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&&i(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(t,e,n){var i=e+" Iterator",r=v(e),a=v(i);l(t,e,(function(t,e){p(this,{type:i,target:t,state:r(t),kind:e,last:void 0})}),(function(){var t=a(this),e=t.kind,n=t.last;while(n&&n.removed)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(e)}}},"6d61":function(t,e,n){"use strict";var i=n("23e7"),r=n("da84"),a=n("94ca"),s=n("6eeb"),o=n("f183"),c=n("2266"),l=n("19aa"),u=n("861d"),h=n("d039"),d=n("1c7e"),f=n("d44e"),p=n("7156");t.exports=function(t,e,n){var v=-1!==t.indexOf("Map"),g=-1!==t.indexOf("Weak"),m=v?"set":"add",b=r[t],y=b&&b.prototype,x=b,_={},w=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,n){return e.call(this,0===t?0:t,n),this})},S=a(t,"function"!=typeof b||!(g||y.forEach&&!h((function(){(new b).entries().next()}))));if(S)x=n.getConstructor(e,t,v,m),o.REQUIRED=!0;else if(a(t,!0)){var j=new x,O=j[m](g?{}:-0,1)!=j,C=h((function(){j.has(1)})),k=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)}));k||(x=e((function(e,n){l(e,x,t);var i=p(new b,e,x);return void 0!=n&&c(n,i[m],{that:i,AS_ENTRIES:v}),i})),x.prototype=y,y.constructor=x),(C||L)&&(w("delete"),w("has"),v&&w("get")),(L||O)&&w(m),g&&y.clear&&delete y.clear}return _[t]=x,i({global:!0,forced:x!=b},_),f(x,t),g||n.setStrong(x,t,v),x}},"6ece":function(t,e,n){},7435:function(t,e,n){},"86cc":function(t,e,n){},"87cf":function(t,e,n){t.exports=n.p+"img/logo-text-colored.5cda006b.png"},"8a79":function(t,e,n){"use strict";var i=n("23e7"),r=n("06cf").f,a=n("50c4"),s=n("5a34"),o=n("1d80"),c=n("ab13"),l=n("c430"),u="".endsWith,h=Math.min,d=c("endsWith"),f=!l&&!d&&!!function(){var t=r(String.prototype,"endsWith");return t&&!t.writable}();i({target:"String",proto:!0,forced:!f&&!d},{endsWith:function(t){var e=String(o(this));s(t);var n=arguments.length>1?arguments[1]:void 0,i=a(e.length),r=void 0===n?i:h(a(n),i),c=String(t);return u?u.call(e,c,r):e.slice(r-c.length,r)===c}})},"8d4f":function(t,e,n){},"8efc":function(t,e,n){},"96cf":function(t,e,n){var i=function(t){"use strict";var e,n=Object.prototype,i=n.hasOwnProperty,r="function"===typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",s=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch($){c=function(t,e,n){return t[e]=n}}function l(t,e,n,i){var r=e&&e.prototype instanceof g?e:g,a=Object.create(r.prototype),s=new B(i||[]);return a._invoke=O(t,n,s),a}function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}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={};y[a]=function(){return this};var x=Object.getPrototypeOf,_=x&&x(x(E([])));_&&_!==n&&i.call(_,a)&&(y=_);var w=b.prototype=g.prototype=Object.create(y);function S(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function j(t,e){function n(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&&i.call(h,"__await")?e.resolve(h.__await).then((function(t){n("next",t,s,o)}),(function(t){n("throw",t,s,o)})):e.resolve(h).then((function(t){l.value=t,s(l)}),(function(t){return n("throw",t,s,o)}))}o(c.arg)}var r;function a(t,i){function a(){return new e((function(e,r){n(t,i,e,r)}))}return r=r?r.then(a,a):a()}this._invoke=a}function O(t,e,n){var i=h;return function(r,a){if(i===f)throw new Error("Generator is already running");if(i===p){if("throw"===r)throw a;return z()}n.method=r,n.arg=a;while(1){var s=n.delegate;if(s){var o=C(s,n);if(o){if(o===v)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===h)throw i=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var c=u(t,e,n);if("normal"===c.type){if(i=n.done?p:d,c.arg===v)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(i=p,n.method="throw",n.arg=c.arg)}}}function C(t,n){var i=t.iterator[n.method];if(i===e){if(n.delegate=null,"throw"===n.method){if(t.iterator["return"]&&(n.method="return",n.arg=e,C(t,n),"throw"===n.method))return v;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var r=u(i,t.iterator,n.arg);if("throw"===r.type)return n.method="throw",n.arg=r.arg,n.delegate=null,v;var a=r.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function k(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(k,this),this.reset(!0)}function E(t){if(t){var n=t[a];if(n)return n.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var r=-1,s=function n(){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=i.call(s,"catchLoc"),l=i.call(s,"finallyLoc");if(c&&l){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),L(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;L(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,i){return this.delegate={iterator:E(t),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=i}catch(r){Function("r","regeneratorRuntime = r")(i)}},9911:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("link")},{link:function(t){return r(this,"a","href",t)}})},a2bf:function(t,e,n){"use strict";var i=n("e8b5"),r=n("50c4"),a=n("0366"),s=function(t,e,n,o,c,l,u,h){var d,f=c,p=0,v=!!u&&a(u,h,3);while(p0&&i(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,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("v-container",{attrs:{fluid:""}},[i("v-row",{staticClass:"bg-img",attrs:{justify:"center",align:"center"}},[i("v-col",{attrs:{cols:"12",align:"center"}},[i("v-img",{attrs:{"max-height":"150","max-width":"250",src:n("87cf")}}),i("br"),i("h4",[t._v(" Reviving the Language that Brought us the Jak & Daxter Series ")]),i("br"),i("v-row",{attrs:{justify:"center"}},[i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"#project-status",rounded:"",color:"primary"}},[i("v-icon",[t._v("mdi-calendar-check")]),t._v(" Project Status ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{rounded:"",color:"secondary",href:"#recent-updates"}},[i("v-icon",[t._v("mdi-update")]),t._v(" Recent Updates ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"/jak-project/api-docs.html",target:"_blank",rounded:"",color:"deep-purple"}},[i("v-icon",[t._v("mdi-file-document")]),t._v(" Documentation ")],1)],1),i("v-col",{attrs:{cols:"auto"}},[i("v-btn",{attrs:{href:"https://github.com/water111/jak-project",target:"_blank",rounded:"",color:"accent"}},[i("v-icon",[t._v("mdi-git")]),t._v(" Contribute ")],1)],1)],1)],1)],1),i("v-row",[i("v-container",[i("v-row",{staticStyle:{"margin-top":"3em"},attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"project-status"}},[t._v(" Project Status ")])])],1),i("v-row",{attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h2",{staticClass:"orange--text text--lighten-3"},[t._v("Jak 1 - Black Label")])])],1),i("v-row",{attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{cols:"10"}},[i("v-subheader",[t._v("Decompilation")]),i("v-progress-linear",{attrs:{color:"teal","buffer-value":"0",value:t.jak1BlackLabelStatus.decompDone,stream:"",height:"25"}},[t._v(" "+t._s(t.jak1BlackLabelStatus.decompLabel)+" - "+t._s(t.jak1BlackLabelStatus.decompDone)+"% ")])],1)],1),i("v-row",{staticStyle:{"margin-top":"5em"},attrs:{align:"center",justify:"center"}},[i("v-col",{attrs:{align:"center"}},[i("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"recent-updates"}},[t._v(" Recent Updates ")])])],1),i("v-row",{staticStyle:{"margin-bottom":"10em"},attrs:{justify:"center"}},t._l(t.recentPRs,(function(e,n){return i("v-col",{key:"pr"-n,attrs:{cols:"4"}},[i("v-card",[i("v-card-text",{staticStyle:{"overflow-y":"auto",height:"300px"}},[i("p",{staticClass:"text-h5 orange--text text--lighten-3"},[t._v(" "+t._s(e.title)+" ")]),i("p",[t._v(" "+t._s(e.user.login)+" ")]),i("div",{staticClass:"text--primary"},[i("pre",{staticClass:"wrapped-pre"},[t._v(t._s(e.body))])])]),i("v-card-actions",[i("v-btn",{attrs:{text:"",color:"accent",href:e.html_url,target:"_blank"}},[t._v(" View Change ")])],1)],1)],1)})),1)],1)],1)],1)},r=[];n("d3b7");function a(t,e,n,i,r,a,s){try{var o=t[a](s),c=o.value}catch(l){return void n(l)}o.done?e(c):Promise.resolve(c).then(i,r)}function s(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var s=t.apply(e,n);function o(t){a(s,i,r,o,c,"next",t)}function c(t){a(s,i,r,o,c,"throw",t)}o(void 0)}))}}n("fb6a"),n("96cf");var o=n("f5f2"),c=o,l={name:"Home",components:{},data:function(){return{recentPRs:[],jak1BlackLabelStatus:{decompDone:c.jak1.locPercentage.value/75e4*100,decompLabel:c.jak1.locPercentage.label}}},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,n,i,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(n=t.sent,i=9,r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"string"===typeof e.style?(Object(_["b"])("style must be an object",this),e):"string"===typeof e.class?(Object(_["b"])("class must be an object",this),e):(Object(w["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(x["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(_["b"])("style must be an object",this),e;if("string"===typeof e.class)return Object(_["b"])("class must be an object",this),e;if(Object(w["d"])(t))e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{color:"".concat(t),"caret-color":"".concat(t)});else if(t){var n=t.toString().trim().split(" ",2),i=Object(v["a"])(n,2),r=i[0],a=i[1];e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(x["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(x["a"])({},"elevation-".concat(this.elevation),!0)}}}),O=n("80d2"),C=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),n=Object(O["d"])(this.minHeight),i=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),n&&(t.minHeight=n),i&&(t.minWidth=i),r&&(t.maxHeight=r),a&&(t.maxWidth=a),s&&(t.width=s),t}}}),k=(n("a4d3"),n("e01a"),n("d28b"),n("3ca3"),n("ddb0"),n("06c5"));function L(t,e){var n="undefined"!==typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=Object(k["a"])(t))||e&&t&&"number"===typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},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(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){o=!0,a=t},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(o)throw a}}}}n("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 n,i=e.split(" "),r=L(i);try{for(r.s();!(n=r.n()).done;){var a=n.value;t.push("rounded-".concat(a))}}catch(s){r.e(s)}finally{r.f()}}else e&&t.push("rounded");return t.length>0?Object(x["a"])({},t.join(" "),!0):{}}}}),E=n("7560"),z=n("58df"),$=Object(z["a"])(y,S,j,C,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=$;n("99af"),n("8d4f");function N(t,e){if("undefined"!==typeof window&&"IntersectionObserver"in window){var n=e.modifiers||{},i=e.value,r="object"===Object(p["a"])(i)?i:{handler:i,options:{}},a=r.handler,s=r.options,o=new IntersectionObserver((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length>1?arguments[1]:void 0;if(t._observe){var r=e.some((function(t){return t.isIntersecting}));!a||n.quiet&&!t._observe.init||n.once&&!r&&t._observe.init||a(e,i,r),r&&n.once?P(t):t._observe.init=!0}}),s);t._observe={init:!1,observer:o},o.observe(t)}}function P(t){t._observe&&(t._observe.observer.unobserve(t),delete t._observe)}var R={inserted:N,unbind:P},I=R,V=S.extend({name:"v-progress-circular",directives:{intersect:I},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,n){this.isVisible=n}},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()])}}),A=V;function W(t,e){return function(){return Object(_["c"])("The ".concat(t," component must be used inside a ").concat(e))}}function D(t,e,n){var i=e&&n?{register:W(e,n),unregister:W(e,n)}:null;return m["a"].extend({name:"registrable-inject",inject:Object(x["a"])({},t,{default:i})})}function F(t,e,n){return D(t,e,n).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(x["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")}}})}F("itemGroup");function H(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"input";return m["a"].extend({name:"toggleable",model:{prop:e,event:n},props:Object(x["a"])({},e,{required:!1}),data:function(){return{isActive:!!this[e]}},watch:(t={},Object(x["a"])(t,e,(function(t){this.isActive=!!t})),Object(x["a"])(t,"isActive",(function(t){!!t!==this[e]&&this.$emit(n,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=(n("9911"),n("5319"),n("b0c0"),n("7435"),Symbol("rippleStop")),Y=80;function X(t,e){t.style.transform=e,t.style.webkitTransform=e}function U(t,e){t.style.opacity=e.toString()}function K(t){return"TouchEvent"===t.constructor.name}function Q(t){return"KeyboardEvent"===t.constructor.name}var Z=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=0,r=0;if(!Q(t)){var a=e.getBoundingClientRect(),s=K(t)?t.touches[t.touches.length-1]:t;i=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=n.center?o:o+Math.sqrt(Math.pow(i-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=n.center?l:"".concat(i-o,"px"),d=n.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 n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e._ripple&&e._ripple.enabled){var i=document.createElement("span"),r=document.createElement("span");i.appendChild(r),i.className="v-ripple__container",n.class&&(i.className+=" ".concat(n.class));var a=Z(t,e,n),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(i);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,")")),U(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)")),U(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 n=e[e.length-1];if(!n.dataset.isHiding){n.dataset.isHiding="true";var i=performance.now()-Number(n.dataset.activated),r=Math.max(250-i,0);setTimeout((function(){n.classList.remove("v-ripple__animation--in"),n.classList.add("v-ripple__animation--out"),U(n,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),n.parentNode&&t.removeChild(n.parentNode)}),300)}),r)}}}}};function et(t){return"undefined"===typeof t||!!t}function nt(t){var e={},n=t.currentTarget;if(n&&n._ripple&&!n._ripple.touched&&!t[J]){if(t[J]=!0,K(t))n._ripple.touched=!0,n._ripple.isTouch=!0;else if(n._ripple.isTouch)return;if(e.center=n._ripple.centered||Q(t),n._ripple.class&&(e.class=n._ripple.class),K(t)){if(n._ripple.showTimerCommit)return;n._ripple.showTimerCommit=function(){tt.show(t,n,e)},n._ripple.showTimer=window.setTimeout((function(){n&&n._ripple&&n._ripple.showTimerCommit&&(n._ripple.showTimerCommit(),n._ripple.showTimerCommit=null)}),Y)}else tt.show(t,n,e)}}function it(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(){it(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,nt(t))}function ot(t){at=!1,it(t)}function ct(t){!0===at&&(at=!1,it(t))}function lt(t,e,n){var i=et(e.value);i||tt.hide(t),t._ripple=t._ripple||{},t._ripple.enabled=i;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),i&&!n?(t.addEventListener("touchstart",nt,{passive:!0}),t.addEventListener("touchend",it,{passive:!0}),t.addEventListener("touchmove",rt,{passive:!0}),t.addEventListener("touchcancel",it),t.addEventListener("mousedown",nt),t.addEventListener("mouseup",it),t.addEventListener("mouseleave",it),t.addEventListener("keydown",st),t.addEventListener("keyup",ot),t.addEventListener("blur",ct),t.addEventListener("dragstart",it,{passive:!0})):!i&&n&&ut(t)}function ut(t){t.removeEventListener("mousedown",nt),t.removeEventListener("touchstart",nt),t.removeEventListener("touchend",it),t.removeEventListener("touchmove",rt),t.removeEventListener("touchcancel",it),t.removeEventListener("mouseup",it),t.removeEventListener("mouseleave",it),t.removeEventListener("keydown",st),t.removeEventListener("keyup",ot),t.removeEventListener("dragstart",it),t.removeEventListener("blur",ct)}function ht(t,e,n){lt(t,e,!1)}function dt(t){delete t._ripple,ut(t)}function ft(t,e){if(e.value!==e.oldValue){var n=et(e.oldValue);lt(t,e,n)}}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,n=this.exact,i=(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(x["a"])(t,this.to?"nativeOn":"on",Object(g["a"])(Object(g["a"])({},this.$listeners),{},{click:this.click})),Object(x["a"])(t,"ref","link"),t);if("undefined"===typeof this.exact&&(n="/"===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(i.props,{to:this.to,exact:n,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&&(i.attrs.href=this.href);return this.target&&(i.attrs.target=this.target),{tag:e,data:i}},onRouteChange:function(){var t=this;if(this.to&&this.$refs.link&&this.$route){var e="".concat(this.activeClass," ").concat(this.proxyClass||"").trim(),n="_vnode.data.class.".concat(e);this.$nextTick((function(){Object(O["h"])(t.$refs.link,n)&&t.toggle()}))}},toggle:function(){}}}),mt=(n("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,F("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 n=Object(v["a"])(e,2),i=n[0],r=n[1];t.$attrs.hasOwnProperty(i)&&Object(_["a"])(i,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(A,{props:{indeterminate:!0,size:23,width:2}})])}},render:function(t){var e=[this.genContent(),this.loading&&this.genLoader()],n=this.generateRouteLink(),i=n.tag,r=n.data,a=this.hasBg?this.setBackgroundColor:this.setTextColor;return"button"===i&&(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(i,this.disabled?r:a(this.color,r),e)}}),xt=(n("0481"),n("615b"),n("6ece"),n("b64b"),{styleList:/;(?![^(]*\))/g,styleProp:/:(.*)/});function _t(t){var e,n={},i=L(t.split(xt.styleList));try{for(i.s();!(e=i.n()).done;){var r=e.value,a=r.split(xt.styleProp),s=Object(v["a"])(a,2),o=s[0],c=s[1];o=o.trim(),o&&("string"===typeof c&&(c=c.trim()),n[Object(O["a"])(o)]=c)}}catch(l){i.e(l)}finally{i.f()}return n}function wt(){var t,e={},n=arguments.length;while(n--)for(var i=0,r=Object.keys(arguments[n]);i0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length,i=new Array(n>1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:"top center 0",n=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:n},origin:{type:String,default:e}},render:function(e,n){var i="transition".concat(n.props.group?"-group":""),r={props:{name:t,mode:n.props.mode},on:{beforeEnter:function(t){t.style.transformOrigin=n.props.origin,t.style.webkitTransformOrigin=n.props.origin}}};return n.props.leaveAbsolute&&(r.on.leave=Ct(r.on.leave,(function(t){var e=t.offsetTop,n=t.offsetLeft,i=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=n+"px",t.style.width=i+"px",t.style.height=r+"px"})),r.on.afterLeave=Ct(r.on.afterLeave,(function(t){if(t&&t._transitionInitialStyles){var e=t._transitionInitialStyles,n=e.position,i=e.top,r=e.left,a=e.width,s=e.height;delete t._transitionInitialStyles,t.style.position=n||"",t.style.top=i||"",t.style.left=r||"",t.style.width=a||"",t.style.height=s||""}}))),n.props.hideOnLeave&&(r.on.leave=Ct(r.on.leave,(function(t){t._initialDisplay=t.style.display,t.style.display="none"})),r.on.afterLeave=Ct(r.on.afterLeave,(function(t){t&&(t.style.display=t._initialDisplay||"")}))),e(i,wt(n.data,r),n.children)}}}function Lt(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"in-out";return{name:t,functional:!0,props:{mode:{type:String,default:n}},render:function(n,i){return n("transition",wt(i.data,{props:{name:t},on:e}),i.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],n=e?"width":"height",i="offset".concat(Object(O["o"])(n));return{beforeEnter:function(t){t._parent=t.parentNode,t._initialStyle=Object(x["a"])({transition:t.style.transition,overflow:t.style.overflow},n,t.style[n])},enter:function(e){var r=e._initialStyle;e.style.setProperty("transition","none","important"),e.style.overflow="hidden";var a="".concat(e[i],"px");e.style[n]="0",e.offsetHeight,e.style.transition=r.transition,t&&e._parent&&e._parent.classList.add(t),requestAnimationFrame((function(){e.style[n]=a}))},afterEnter:a,enterCancelled:a,leave:function(t){t._initialStyle=Object(x["a"])({transition:"",overflow:t.style.overflow},n,t.style[n]),t.style.overflow="hidden",t.style[n]="".concat(t[i],"px"),t.offsetHeight,requestAnimationFrame((function(){return t.style[n]="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[n];t.style.overflow=t._initialStyle.overflow,null!=e&&(t.style[n]=e),delete t._initialStyle}},Et=(kt("carousel-transition"),kt("carousel-reverse-transition"),kt("tab-transition"),kt("tab-reverse-transition"),kt("menu-transition"),kt("fab-transition","center center","out-in"),kt("dialog-transition"),kt("dialog-bottom-transition"),kt("dialog-top-transition"),kt("fade-transition")),zt=(kt("scale-transition"),kt("scroll-x-transition"),kt("scroll-x-reverse-transition"),kt("scroll-y-transition"),kt("scroll-y-reverse-transition"),kt("slide-x-transition"));kt("slide-x-reverse-transition"),kt("slide-y-transition"),kt("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(x["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(x["a"])({},t,(function(t){this.internalLazyValue=t}))})}var Tt=$t(),Nt=Tt,Pt=Object(z["a"])(S,q(["absolute","fixed","top","bottom"]),Nt,E["a"]),Rt=Pt.extend({name:"v-progress-linear",directives:{intersect:I},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(x["a"])(t,this.isReversed?"right":"left",Object(O["d"])(this.normalizedValue,"%")),Object(x["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(x["a"])({},t,!0)}))},onClick:function(t){if(this.reactive){var e=this.$el.getBoundingClientRect(),n=e.width;this.internalValue=t.offsetX/n*100}},onObserve:function(t,e,n){this.isVisible=n},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()])}}),It=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(It,{props:{absolute:!0,color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,height:this.loaderHeight,indeterminate:!0}})}}}),At=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(),n=e.tag,i=e.data;return i.style=this.styles,this.isClickable&&(i.attrs=i.attrs||{},i.attrs.tabindex=0),t(n,this.setBackgroundColor(this.color,i),[this.genProgress(),this.$slots.default])}}),Wt=Object(O["e"])("v-card__actions"),Dt=(Object(O["e"])("v-card__subtitle"),Object(O["e"])("v-card__text")),Ft=(Object(O["e"])("v-card__title"),n("4ec9"),n("159b"),n("2ca0"),n("4b85"),["sm","md","lg","xl"]),Ht=function(){return Ft.reduce((function(t,e){return t[e]={type:[Boolean,String,Number],default:!1},t}),{})}(),Mt=function(){return Ft.reduce((function(t,e){return t["offset"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),qt=function(){return Ft.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,n){var i=t;if(null!=n&&!1!==n){if(e){var r=e.replace(t,"");i+="-".concat(r)}return"col"!==t||""!==n&&!0!==n?(i+="-".concat(n),i.toLowerCase()):i.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 n=e.props,i=e.data,r=e.children,a=(e.parent,"");for(var s in n)a+=String(n[s]);var o=Yt.get(a);return o||function(){var t,e;for(e in o=[],Gt)Gt[e].forEach((function(t){var i=n[t],r=Jt(e,t,i);r&&o.push(r)}));var i=o.some((function(t){return t.startsWith("col-")}));o.push((t={col:!i||!n.cols},Object(x["a"])(t,"col-".concat(n.cols),n.cols),Object(x["a"])(t,"offset-".concat(n.offset),n.offset),Object(x["a"])(t,"order-".concat(n.order),n.order),Object(x["a"])(t,"align-self-".concat(n.alignSelf),n.alignSelf),t)),Yt.set(a,o)}(),t(n.tag,wt(i,{class:o}),r)}});n("4de4"),n("20f6");function Ut(t){return m["a"].extend({name:"v-".concat(t),functional:!0,props:{id:String,tag:{type:String,default:"div"}},render:function(e,n){var i=n.props,r=n.data,a=n.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 i.id&&(r.domProps=r.domProps||{},r.domProps.id=i.id),e(i.tag,r,a)}})}var Kt,Qt=Ut("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 n,i=e.props,r=e.data,a=e.children,s=r.attrs;return s&&(r.attrs={},n=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}))),i.id&&(r.domProps=r.domProps||{},r.domProps.id=i.id),t(i.tag,wt(r,{staticClass:"container",class:Array({"container--fluid":i.fluid}).concat(n||[])}),a)}});n("2532"),n("7db0"),n("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"})(Kt||(Kt={}));var ee=Object(z["a"])(y,S,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&&Kt[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 n=[],i=this.getDefaultData(),r="material-icons",a=t.indexOf("-"),s=a<=-1;s?n.push(t):(r=t.slice(0,a),Zt(r)&&(r="")),i.class[r]=!0,i.class[t]=!s;var o=this.getSize();return o&&(i.style={fontSize:o}),this.applyColors(i),e(this.hasClickListener?"button":this.tag,i,n)},renderSvgIcon:function(t,e){var n={class:"v-icon__svg",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":!0}},i=this.getSize();return i&&(n.style={fontSize:i,height:i,width:i}),e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e("svg",n,[e("path",{attrs:{d:t}})])])},renderSvgIconComponent:function(t,e){var n={class:{"v-icon__component":!0}},i=this.getSize();i&&(n.style={fontSize:i,height:i,width:i}),this.applyColors(n);var r=t.component;return n.props=t.props,n.nativeOn=n.on,e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e(r,n)])}},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)}}),ne=m["a"].extend({name:"v-icon",$_wrapperFor:ee,functional:!0,render:function(t,e){var n=e.data,i=e.children,r="";return n.domProps&&(r=n.domProps.textContent||n.domProps.innerHTML||r,delete n.domProps.textContent,delete n.domProps.innerHTML),t(ee,n,r?[r]:i)}}),ie=(n("8a79"),n("8efc"),n("36a7"),Object(z["a"])(C).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=ie,ae="undefined"!==typeof window&&"IntersectionObserver"in window,se=Object(z["a"])(re,E["a"]).extend({name:"v-img",directives:{intersect:I},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 n=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"}},[n]):n}},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,n){if(!ae||n||this.eager){if(this.normalisedSrc.lazySrc){var i=new Image;i.src=this.normalisedSrc.lazySrc,this.pollForSize(i,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(_["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,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,i=function i(){var r=t.naturalHeight,a=t.naturalWidth;r||a?(e.naturalWidth=a,e.calculatedAspectRatio=a/r):t.complete||!e.isLoading||e.hasError||null==n||setTimeout(i,n)};i()},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),n=wt(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,n,e.children)}}),oe=["sm","md","lg","xl"],ce=["start","end","center"];function le(t,e){return oe.reduce((function(n,i){return n[t+Object(O["o"])(i)]=e(),n}),{})}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,n){var i=me[t];if(null!=n){if(e){var r=e.replace(t,"");i+="-".concat(r)}return i+="-".concat(n),i.toLowerCase()}}var ye=new Map,xe=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 n=e.props,i=e.data,r=e.children,a="";for(var s in n)a+=String(n[s]);var o=ye.get(a);return o||function(){var t,e;for(e in o=[],ge)ge[e].forEach((function(t){var i=n[t],r=be(e,t,i);r&&o.push(r)}));o.push((t={"no-gutters":n.noGutters,"row--dense":n.dense},Object(x["a"])(t,"align-".concat(n.align),n.align),Object(x["a"])(t,"justify-".concat(n.justify),n.justify),Object(x["a"])(t,"align-content-".concat(n.alignContent),n.alignContent),t)),ye.set(a,o)}(),t(n.tag,wt(i,{staticClass:"row",class:o}),r)}}),_e=(n("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)}})),we=Object(h["a"])(u,i,r,!1,null,"7ed77054",null);e["default"]=we.exports;f()(we,{VBtn:yt,VCard:At,VCardActions:Wt,VCardText:Dt,VCol:Xt,VContainer:Qt,VIcon:ne,VImg:se,VProgressLinear:Rt,VRow:xe,VSubheader:_e})},c7cd:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("fixed")},{fixed:function(){return r(this,"tt","","")}})},c96a:function(t,e,n){"use strict";var i=n("23e7"),r=n("857a"),a=n("af03");i({target:"String",proto:!0,forced:a("small")},{small:function(){return r(this,"small","","")}})},f5f2:function(t){t.exports=JSON.parse('{"jak1":{"locPercentage":{"value":103209,"label":"Lines of Code"}}}')}}]); -//# sourceMappingURL=about.c7b7de46.js.map \ No newline at end of file diff --git a/docs/js/about.c7b7de46.js.map b/docs/js/about.c7b7de46.js.map deleted file mode 100644 index 35a72d6299..0000000000 --- a/docs/js/about.c7b7de46.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./src/views/Home.vue?7177","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:///./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?b24d","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","REQUIRED","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","constructor","forced","getOwnPropertyDescriptor","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","toString","keys","object","reverse","pop","skipTempReset","charAt","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","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","decompDone","_s","decompLabel","_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":"kIACA,IAAIA,EAAI,EAAQ,QACZC,EAAmB,EAAQ,QAC3BC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAY,EAAQ,QACpBC,EAAqB,EAAQ,QAIjCL,EAAE,CAAEM,OAAQ,QAASC,OAAO,GAAQ,CAClCC,KAAM,WACJ,IAAIC,EAAWC,UAAUC,OAASD,UAAU,QAAKE,EAC7CC,EAAIX,EAASY,MACbC,EAAYZ,EAASU,EAAEF,QACvBK,EAAIX,EAAmBQ,EAAG,GAE9B,OADAG,EAAEL,OAASV,EAAiBe,EAAGH,EAAGA,EAAGE,EAAW,OAAgBH,IAAbH,EAAyB,EAAIL,EAAUK,IACnFO,M,6DCjBX,W,+JCCA,IAAIC,EAAa,EAAQ,QACrBC,EAAmB,EAAQ,QAI/BC,EAAOC,QAAUH,EAAW,OAAO,SAAUI,GAC3C,OAAO,WAAiB,OAAOA,EAAKP,KAAMJ,UAAUC,OAASD,UAAU,QAAKE,MAC3EM,I,2DCPH,IAAII,EAAiB,EAAQ,QAAuCC,EAChEC,EAAS,EAAQ,QACjBC,EAAc,EAAQ,QACtBC,EAAO,EAAQ,QACfC,EAAa,EAAQ,QACrBC,EAAU,EAAQ,QAClBC,EAAiB,EAAQ,QACzBC,EAAa,EAAQ,QACrBC,EAAc,EAAQ,QACtBC,EAAU,EAAQ,QAAkCA,QACpDC,EAAsB,EAAQ,QAE9BC,EAAmBD,EAAoBE,IACvCC,EAAyBH,EAAoBI,UAEjDlB,EAAOC,QAAU,CACfkB,eAAgB,SAAUC,EAASC,EAAkBC,EAAQC,GAC3D,IAAIC,EAAIJ,GAAQ,SAAUK,EAAMC,GAC9BlB,EAAWiB,EAAMD,EAAGH,GACpBN,EAAiBU,EAAM,CACrBE,KAAMN,EACNO,MAAOvB,EAAO,MACdwB,WAAOpC,EACPqC,UAAMrC,EACNsC,KAAM,IAEHnB,IAAaa,EAAKM,KAAO,QACdtC,GAAZiC,GAAuBjB,EAAQiB,EAAUD,EAAKF,GAAQ,CAAEE,KAAMA,EAAMO,WAAYV,OAGlFW,EAAmBhB,EAAuBI,GAE1Ca,EAAS,SAAUT,EAAMU,EAAKC,GAChC,IAEIC,EAAUT,EAFVU,EAAQL,EAAiBR,GACzBc,EAAQC,EAASf,EAAMU,GAqBzB,OAlBEI,EACFA,EAAMH,MAAQA,GAGdE,EAAMR,KAAOS,EAAQ,CACnBX,MAAOA,EAAQf,EAAQsB,GAAK,GAC5BA,IAAKA,EACLC,MAAOA,EACPC,SAAUA,EAAWC,EAAMR,KAC3BW,UAAMhD,EACNiD,SAAS,GAENJ,EAAMT,QAAOS,EAAMT,MAAQU,GAC5BF,IAAUA,EAASI,KAAOF,GAC1B3B,EAAa0B,EAAMP,OAClBN,EAAKM,OAEI,MAAVH,IAAeU,EAAMV,MAAMA,GAASW,IACjCd,GAGPe,EAAW,SAAUf,EAAMU,GAC7B,IAGII,EAHAD,EAAQL,EAAiBR,GAEzBG,EAAQf,EAAQsB,GAEpB,GAAc,MAAVP,EAAe,OAAOU,EAAMV,MAAMA,GAEtC,IAAKW,EAAQD,EAAMT,MAAOU,EAAOA,EAAQA,EAAME,KAC7C,GAAIF,EAAMJ,KAAOA,EAAK,OAAOI,GAwFjC,OApFAjC,EAAYkB,EAAEmB,UAAW,CAIvBC,MAAO,WACL,IAAInB,EAAO9B,KACP2C,EAAQL,EAAiBR,GACzBoB,EAAOP,EAAMV,MACbW,EAAQD,EAAMT,MAClB,MAAOU,EACLA,EAAMG,SAAU,EACZH,EAAMF,WAAUE,EAAMF,SAAWE,EAAMF,SAASI,UAAOhD,UACpDoD,EAAKN,EAAMX,OAClBW,EAAQA,EAAME,KAEhBH,EAAMT,MAAQS,EAAMR,UAAOrC,EACvBmB,EAAa0B,EAAMP,KAAO,EACzBN,EAAKM,KAAO,GAKnB,OAAU,SAAUI,GAClB,IAAIV,EAAO9B,KACP2C,EAAQL,EAAiBR,GACzBc,EAAQC,EAASf,EAAMU,GAC3B,GAAII,EAAO,CACT,IAAIE,EAAOF,EAAME,KACbK,EAAOP,EAAMF,gBACVC,EAAMV,MAAMW,EAAMX,OACzBW,EAAMG,SAAU,EACZI,IAAMA,EAAKL,KAAOA,GAClBA,IAAMA,EAAKJ,SAAWS,GACtBR,EAAMT,OAASU,IAAOD,EAAMT,MAAQY,GACpCH,EAAMR,MAAQS,IAAOD,EAAMR,KAAOgB,GAClClC,EAAa0B,EAAMP,OAClBN,EAAKM,OACV,QAASQ,GAKbQ,QAAS,SAAiBC,GACxB,IAEIT,EAFAD,EAAQL,EAAiBtC,MACzBsD,EAAgB1C,EAAKyC,EAAYzD,UAAUC,OAAS,EAAID,UAAU,QAAKE,EAAW,GAEtF,MAAO8C,EAAQA,EAAQA,EAAME,KAAOH,EAAMT,MAAO,CAC/CoB,EAAcV,EAAMH,MAAOG,EAAMJ,IAAKxC,MAEtC,MAAO4C,GAASA,EAAMG,QAASH,EAAQA,EAAMF,WAMjDa,IAAK,SAAaf,GAChB,QAASK,EAAS7C,KAAMwC,MAI5B7B,EAAYkB,EAAEmB,UAAWrB,EAAS,CAGhC6B,IAAK,SAAahB,GAChB,IAAII,EAAQC,EAAS7C,KAAMwC,GAC3B,OAAOI,GAASA,EAAMH,OAIxBpB,IAAK,SAAamB,EAAKC,GACrB,OAAOF,EAAOvC,KAAc,IAARwC,EAAY,EAAIA,EAAKC,KAEzC,CAGFgB,IAAK,SAAahB,GAChB,OAAOF,EAAOvC,KAAMyC,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,MAGrDxB,GAAaT,EAAeqB,EAAEmB,UAAW,OAAQ,CACnDQ,IAAK,WACH,OAAOlB,EAAiBtC,MAAMoC,QAG3BP,GAET6B,UAAW,SAAU7B,EAAGH,EAAkBC,GACxC,IAAIgC,EAAgBjC,EAAmB,YACnCkC,EAA6BtC,EAAuBI,GACpDmC,EAA2BvC,EAAuBqC,GAUtD5C,EAAec,EAAGH,GAAkB,SAAUoC,EAAUC,GACtD3C,EAAiBpB,KAAM,CACrBgC,KAAM2B,EACNnE,OAAQsE,EACRnB,MAAOiB,EAA2BE,GAClCC,KAAMA,EACN5B,UAAMrC,OAEP,WACD,IAAI6C,EAAQkB,EAAyB7D,MACjC+D,EAAOpB,EAAMoB,KACbnB,EAAQD,EAAMR,KAElB,MAAOS,GAASA,EAAMG,QAASH,EAAQA,EAAMF,SAE7C,OAAKC,EAAMnD,SAAYmD,EAAMR,KAAOS,EAAQA,EAAQA,EAAME,KAAOH,EAAMA,MAAMT,OAMjE,QAAR6B,EAAuB,CAAEtB,MAAOG,EAAMJ,IAAKwB,MAAM,GACzC,UAARD,EAAyB,CAAEtB,MAAOG,EAAMH,MAAOuB,MAAM,GAClD,CAAEvB,MAAO,CAACG,EAAMJ,IAAKI,EAAMH,OAAQuB,MAAM,IAN9CrB,EAAMnD,YAASM,EACR,CAAE2C,WAAO3C,EAAWkE,MAAM,MAMlCrC,EAAS,UAAY,UAAWA,GAAQ,GAK3CX,EAAWU,M,oCCtMf,IAAIxC,EAAI,EAAQ,QACZ+E,EAAS,EAAQ,QACjBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAyB,EAAQ,QACjCtD,EAAU,EAAQ,QAClBD,EAAa,EAAQ,QACrBwD,EAAW,EAAQ,QACnBC,EAAQ,EAAQ,QAChBC,EAA8B,EAAQ,QACtCC,EAAiB,EAAQ,QACzBC,EAAoB,EAAQ,QAEhCpE,EAAOC,QAAU,SAAUoB,EAAkBD,EAASiD,GACpD,IAAI/C,GAA8C,IAArCD,EAAiBiD,QAAQ,OAClCC,GAAgD,IAAtClD,EAAiBiD,QAAQ,QACnC/C,EAAQD,EAAS,MAAQ,MACzBkD,EAAoBZ,EAAOvC,GAC3BoD,EAAkBD,GAAqBA,EAAkB7B,UACzD+B,EAAcF,EACdG,EAAW,GAEXC,EAAY,SAAUC,GACxB,IAAIC,EAAeL,EAAgBI,GACnCf,EAASW,EAAiBI,EACjB,OAAPA,EAAe,SAAazC,GAE1B,OADA0C,EAAaC,KAAKpF,KAAgB,IAAVyC,EAAc,EAAIA,GACnCzC,MACE,UAAPkF,EAAkB,SAAU1C,GAC9B,QAAOoC,IAAYP,EAAS7B,KAAe2C,EAAaC,KAAKpF,KAAc,IAARwC,EAAY,EAAIA,IAC1E,OAAP0C,EAAe,SAAa1C,GAC9B,OAAOoC,IAAYP,EAAS7B,QAAO1C,EAAYqF,EAAaC,KAAKpF,KAAc,IAARwC,EAAY,EAAIA,IAC9E,OAAP0C,EAAe,SAAa1C,GAC9B,QAAOoC,IAAYP,EAAS7B,KAAe2C,EAAaC,KAAKpF,KAAc,IAARwC,EAAY,EAAIA,IACjF,SAAaA,EAAKC,GAEpB,OADA0C,EAAaC,KAAKpF,KAAc,IAARwC,EAAY,EAAIA,EAAKC,GACtCzC,QAKTqF,EAAUnB,EACZxC,EAC4B,mBAArBmD,KAAqCD,GAAWE,EAAgB1B,UAAYkB,GAAM,YACvF,IAAIO,GAAoBS,UAAUxC,YAItC,GAAIuC,EAEFN,EAAcL,EAAOlD,eAAeC,EAASC,EAAkBC,EAAQC,GACvEwC,EAAuBmB,UAAW,OAC7B,GAAIrB,EAASxC,GAAkB,GAAO,CAC3C,IAAI8D,EAAW,IAAIT,EAEfU,EAAiBD,EAAS5D,GAAOgD,EAAU,IAAM,EAAG,IAAMY,EAE1DE,EAAuBpB,GAAM,WAAckB,EAASjC,IAAI,MAGxDoC,EAAmBpB,GAA4B,SAAUxC,GAAY,IAAI8C,EAAkB9C,MAE3F6D,GAAchB,GAAWN,GAAM,WAEjC,IAAIuB,EAAY,IAAIhB,EAChB5C,EAAQ,EACZ,MAAOA,IAAS4D,EAAUjE,GAAOK,EAAOA,GACxC,OAAQ4D,EAAUtC,KAAK,MAGpBoC,IACHZ,EAActD,GAAQ,SAAUqE,EAAO/D,GACrClB,EAAWiF,EAAOf,EAAarD,GAC/B,IAAII,EAAO2C,EAAkB,IAAII,EAAqBiB,EAAOf,GAE7D,YADgBjF,GAAZiC,GAAuBjB,EAAQiB,EAAUD,EAAKF,GAAQ,CAAEE,KAAMA,EAAMO,WAAYV,IAC7EG,KAETiD,EAAY/B,UAAY8B,EACxBA,EAAgBiB,YAAchB,IAG5BW,GAAwBE,KAC1BX,EAAU,UACVA,EAAU,OACVtD,GAAUsD,EAAU,SAGlBW,GAAcH,IAAgBR,EAAUrD,GAGxCgD,GAAWE,EAAgB7B,cAAc6B,EAAgB7B,MAU/D,OAPA+B,EAAStD,GAAoBqD,EAC7B7F,EAAE,CAAE+E,QAAQ,EAAM+B,OAAQjB,GAAeF,GAAqBG,GAE9DR,EAAeO,EAAarD,GAEvBkD,GAASF,EAAOhB,UAAUqB,EAAarD,EAAkBC,GAEvDoD,I,gGCrGT1E,EAAOC,QAAU,IAA0B,sC,oCCC3C,IAAIpB,EAAI,EAAQ,QACZ+G,EAA2B,EAAQ,QAAmDxF,EACtFpB,EAAW,EAAQ,QACnB6G,EAAa,EAAQ,QACrBC,EAAyB,EAAQ,QACjCC,EAAuB,EAAQ,QAC/BC,EAAU,EAAQ,QAGlBC,EAAY,GAAGC,SACfC,EAAMC,KAAKD,IAEXE,EAA0BN,EAAqB,YAE/CO,GAAoBN,IAAYK,KAA6B,WAC/D,IAAIE,EAAaX,EAAyBY,OAAO7D,UAAW,YAC5D,OAAO4D,IAAeA,EAAWE,SAF8B,GAOjE5H,EAAE,CAAEM,OAAQ,SAAUC,OAAO,EAAMuG,QAASW,IAAqBD,GAA2B,CAC1FH,SAAU,SAAkBQ,GAC1B,IAAIjF,EAAO+E,OAAOV,EAAuBnG,OACzCkG,EAAWa,GACX,IAAIC,EAAcpH,UAAUC,OAAS,EAAID,UAAU,QAAKE,EACpDmH,EAAM5H,EAASyC,EAAKjC,QACpBqH,OAAsBpH,IAAhBkH,EAA4BC,EAAMT,EAAInH,EAAS2H,GAAcC,GACnEE,EAASN,OAAOE,GACpB,OAAOT,EACHA,EAAUlB,KAAKtD,EAAMqF,EAAQD,GAC7BpF,EAAKsF,MAAMF,EAAMC,EAAOtH,OAAQqH,KAASC,M,yECzBjD,IAAIE,EAAW,SAAU/G,GACvB,aAEA,IAEIR,EAFAwH,EAAKC,OAAOvE,UACZwE,EAASF,EAAGG,eAEZC,EAA4B,oBAAXC,OAAwBA,OAAS,GAClDC,EAAiBF,EAAQG,UAAY,aACrCC,EAAsBJ,EAAQK,eAAiB,kBAC/CC,EAAoBN,EAAQO,aAAe,gBAE/C,SAAS1F,EAAO2F,EAAK1F,EAAKC,GAOxB,OANA8E,OAAO/G,eAAe0H,EAAK1F,EAAK,CAC9BC,MAAOA,EACP0F,YAAY,EACZC,cAAc,EACdtB,UAAU,IAELoB,EAAI1F,GAEb,IAEED,EAAO,GAAI,IACX,MAAO8F,GACP9F,EAAS,SAAS2F,EAAK1F,EAAKC,GAC1B,OAAOyF,EAAI1F,GAAOC,GAItB,SAAS6F,EAAKC,EAASC,EAASC,EAAMC,GAEpC,IAAIC,EAAiBH,GAAWA,EAAQxF,qBAAqB4F,EAAYJ,EAAUI,EAC/EC,EAAYtB,OAAO7G,OAAOiI,EAAe3F,WACzC8F,EAAU,IAAIC,EAAQL,GAAe,IAMzC,OAFAG,EAAUG,QAAUC,EAAiBV,EAASE,EAAMK,GAE7CD,EAcT,SAASK,EAASC,EAAIjB,EAAKkB,GACzB,IACE,MAAO,CAAEpH,KAAM,SAAUoH,IAAKD,EAAG/D,KAAK8C,EAAKkB,IAC3C,MAAOf,GACP,MAAO,CAAErG,KAAM,QAASoH,IAAKf,IAhBjC/H,EAAQgI,KAAOA,EAoBf,IAAIe,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,EAAmB,GAMvB,SAASb,KACT,SAASc,KACT,SAASC,KAIT,IAAIC,EAAoB,GACxBA,EAAkBhC,GAAkB,WAClC,OAAO5H,MAGT,IAAI6J,EAAWtC,OAAOuC,eAClBC,EAA0BF,GAAYA,EAASA,EAASG,EAAO,MAC/DD,GACAA,IAA4BzC,GAC5BE,EAAOpC,KAAK2E,EAAyBnC,KAGvCgC,EAAoBG,GAGtB,IAAIE,EAAKN,EAA2B3G,UAClC4F,EAAU5F,UAAYuE,OAAO7G,OAAOkJ,GAWtC,SAASM,EAAsBlH,GAC7B,CAAC,OAAQ,QAAS,UAAUI,SAAQ,SAAS+G,GAC3C5H,EAAOS,EAAWmH,GAAQ,SAASf,GACjC,OAAOpJ,KAAKgJ,QAAQmB,EAAQf,SAkClC,SAASgB,EAAcvB,EAAWwB,GAChC,SAASC,EAAOH,EAAQf,EAAKmB,EAASC,GACpC,IAAIC,EAASvB,EAASL,EAAUsB,GAAStB,EAAWO,GACpD,GAAoB,UAAhBqB,EAAOzI,KAEJ,CACL,IAAI0I,EAASD,EAAOrB,IAChB3G,EAAQiI,EAAOjI,MACnB,OAAIA,GACiB,kBAAVA,GACP+E,EAAOpC,KAAK3C,EAAO,WACd4H,EAAYE,QAAQ9H,EAAMkI,SAASC,MAAK,SAASnI,GACtD6H,EAAO,OAAQ7H,EAAO8H,EAASC,MAC9B,SAASnC,GACViC,EAAO,QAASjC,EAAKkC,EAASC,MAI3BH,EAAYE,QAAQ9H,GAAOmI,MAAK,SAASC,GAI9CH,EAAOjI,MAAQoI,EACfN,EAAQG,MACP,SAASI,GAGV,OAAOR,EAAO,QAASQ,EAAOP,EAASC,MAvBzCA,EAAOC,EAAOrB,KA4BlB,IAAI2B,EAEJ,SAASC,EAAQb,EAAQf,GACvB,SAAS6B,IACP,OAAO,IAAIZ,GAAY,SAASE,EAASC,GACvCF,EAAOH,EAAQf,EAAKmB,EAASC,MAIjC,OAAOO,EAaLA,EAAkBA,EAAgBH,KAChCK,EAGAA,GACEA,IAKRjL,KAAKgJ,QAAUgC,EA2BjB,SAAS/B,EAAiBV,EAASE,EAAMK,GACvC,IAAInG,EAAQ0G,EAEZ,OAAO,SAAgBc,EAAQf,GAC7B,GAAIzG,IAAU4G,EACZ,MAAM,IAAI2B,MAAM,gCAGlB,GAAIvI,IAAU6G,EAAmB,CAC/B,GAAe,UAAXW,EACF,MAAMf,EAKR,OAAO+B,IAGTrC,EAAQqB,OAASA,EACjBrB,EAAQM,IAAMA,EAEd,MAAO,EAAM,CACX,IAAIgC,EAAWtC,EAAQsC,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUtC,GACnD,GAAIuC,EAAgB,CAClB,GAAIA,IAAmB5B,EAAkB,SACzC,OAAO4B,GAIX,GAAuB,SAAnBvC,EAAQqB,OAGVrB,EAAQyC,KAAOzC,EAAQ0C,MAAQ1C,EAAQM,SAElC,GAAuB,UAAnBN,EAAQqB,OAAoB,CACrC,GAAIxH,IAAU0G,EAEZ,MADA1G,EAAQ6G,EACFV,EAAQM,IAGhBN,EAAQ2C,kBAAkB3C,EAAQM,SAEN,WAAnBN,EAAQqB,QACjBrB,EAAQ4C,OAAO,SAAU5C,EAAQM,KAGnCzG,EAAQ4G,EAER,IAAIkB,EAASvB,EAASX,EAASE,EAAMK,GACrC,GAAoB,WAAhB2B,EAAOzI,KAAmB,CAO5B,GAJAW,EAAQmG,EAAQ9E,KACZwF,EACAF,EAEAmB,EAAOrB,MAAQK,EACjB,SAGF,MAAO,CACLhH,MAAOgI,EAAOrB,IACdpF,KAAM8E,EAAQ9E,MAGS,UAAhByG,EAAOzI,OAChBW,EAAQ6G,EAGRV,EAAQqB,OAAS,QACjBrB,EAAQM,IAAMqB,EAAOrB,OAU7B,SAASkC,EAAoBF,EAAUtC,GACrC,IAAIqB,EAASiB,EAASvD,SAASiB,EAAQqB,QACvC,GAAIA,IAAWrK,EAAW,CAKxB,GAFAgJ,EAAQsC,SAAW,KAEI,UAAnBtC,EAAQqB,OAAoB,CAE9B,GAAIiB,EAASvD,SAAS,YAGpBiB,EAAQqB,OAAS,SACjBrB,EAAQM,IAAMtJ,EACdwL,EAAoBF,EAAUtC,GAEP,UAAnBA,EAAQqB,QAGV,OAAOV,EAIXX,EAAQqB,OAAS,QACjBrB,EAAQM,IAAM,IAAIuC,UAChB,kDAGJ,OAAOlC,EAGT,IAAIgB,EAASvB,EAASiB,EAAQiB,EAASvD,SAAUiB,EAAQM,KAEzD,GAAoB,UAAhBqB,EAAOzI,KAIT,OAHA8G,EAAQqB,OAAS,QACjBrB,EAAQM,IAAMqB,EAAOrB,IACrBN,EAAQsC,SAAW,KACZ3B,EAGT,IAAImC,EAAOnB,EAAOrB,IAElB,OAAMwC,EAOFA,EAAK5H,MAGP8E,EAAQsC,EAASS,YAAcD,EAAKnJ,MAGpCqG,EAAQhG,KAAOsI,EAASU,QAQD,WAAnBhD,EAAQqB,SACVrB,EAAQqB,OAAS,OACjBrB,EAAQM,IAAMtJ,GAUlBgJ,EAAQsC,SAAW,KACZ3B,GANEmC,GA3BP9C,EAAQqB,OAAS,QACjBrB,EAAQM,IAAM,IAAIuC,UAAU,oCAC5B7C,EAAQsC,SAAW,KACZ3B,GAoDX,SAASsC,EAAaC,GACpB,IAAIpJ,EAAQ,CAAEqJ,OAAQD,EAAK,IAEvB,KAAKA,IACPpJ,EAAMsJ,SAAWF,EAAK,IAGpB,KAAKA,IACPpJ,EAAMuJ,WAAaH,EAAK,GACxBpJ,EAAMwJ,SAAWJ,EAAK,IAGxBhM,KAAKqM,WAAWC,KAAK1J,GAGvB,SAAS2J,EAAc3J,GACrB,IAAI6H,EAAS7H,EAAM4J,YAAc,GACjC/B,EAAOzI,KAAO,gBACPyI,EAAOrB,IACdxG,EAAM4J,WAAa/B,EAGrB,SAAS1B,EAAQL,GAIf1I,KAAKqM,WAAa,CAAC,CAAEJ,OAAQ,SAC7BvD,EAAYtF,QAAQ2I,EAAc/L,MAClCA,KAAKyM,OAAM,GA8Bb,SAASzC,EAAOjI,GACd,GAAIA,EAAU,CACZ,IAAI2K,EAAiB3K,EAAS6F,GAC9B,GAAI8E,EACF,OAAOA,EAAetH,KAAKrD,GAG7B,GAA6B,oBAAlBA,EAASe,KAClB,OAAOf,EAGT,IAAK4K,MAAM5K,EAASlC,QAAS,CAC3B,IAAI+M,GAAK,EAAG9J,EAAO,SAASA,IAC1B,QAAS8J,EAAI7K,EAASlC,OACpB,GAAI2H,EAAOpC,KAAKrD,EAAU6K,GAGxB,OAFA9J,EAAKL,MAAQV,EAAS6K,GACtB9J,EAAKkB,MAAO,EACLlB,EAOX,OAHAA,EAAKL,MAAQ3C,EACbgD,EAAKkB,MAAO,EAELlB,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMqI,GAIjB,SAASA,IACP,MAAO,CAAE1I,MAAO3C,EAAWkE,MAAM,GA+MnC,OA5mBA0F,EAAkB1G,UAAYiH,EAAGlE,YAAc4D,EAC/CA,EAA2B5D,YAAc2D,EACzCA,EAAkBmD,YAActK,EAC9BoH,EACA3B,EACA,qBAaF1H,EAAQwM,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,oBAAXD,GAAyBA,EAAOhH,YAClD,QAAOiH,IACHA,IAAStD,GAG2B,uBAAnCsD,EAAKH,aAAeG,EAAKC,QAIhC3M,EAAQ4M,KAAO,SAASH,GAQtB,OAPIxF,OAAO4F,eACT5F,OAAO4F,eAAeJ,EAAQpD,IAE9BoD,EAAOK,UAAYzD,EACnBpH,EAAOwK,EAAQ/E,EAAmB,sBAEpC+E,EAAO/J,UAAYuE,OAAO7G,OAAOuJ,GAC1B8C,GAOTzM,EAAQ+M,MAAQ,SAASjE,GACvB,MAAO,CAAEuB,QAASvB,IAsEpBc,EAAsBE,EAAcpH,WACpCoH,EAAcpH,UAAU8E,GAAuB,WAC7C,OAAO9H,MAETM,EAAQ8J,cAAgBA,EAKxB9J,EAAQgN,MAAQ,SAAS/E,EAASC,EAASC,EAAMC,EAAa2B,QACxC,IAAhBA,IAAwBA,EAAckD,SAE1C,IAAIC,EAAO,IAAIpD,EACb9B,EAAKC,EAASC,EAASC,EAAMC,GAC7B2B,GAGF,OAAO/J,EAAQwM,oBAAoBtE,GAC/BgF,EACAA,EAAK1K,OAAO8H,MAAK,SAASF,GACxB,OAAOA,EAAO1G,KAAO0G,EAAOjI,MAAQ+K,EAAK1K,WAuKjDoH,EAAsBD,GAEtB1H,EAAO0H,EAAIjC,EAAmB,aAO9BiC,EAAGrC,GAAkB,WACnB,OAAO5H,MAGTiK,EAAGwD,SAAW,WACZ,MAAO,sBAkCTnN,EAAQoN,KAAO,SAASC,GACtB,IAAID,EAAO,GACX,IAAK,IAAIlL,KAAOmL,EACdD,EAAKpB,KAAK9J,GAMZ,OAJAkL,EAAKE,UAIE,SAAS9K,IACd,MAAO4K,EAAK7N,OAAQ,CAClB,IAAI2C,EAAMkL,EAAKG,MACf,GAAIrL,KAAOmL,EAGT,OAFA7K,EAAKL,MAAQD,EACbM,EAAKkB,MAAO,EACLlB,EAQX,OADAA,EAAKkB,MAAO,EACLlB,IAsCXxC,EAAQ0J,OAASA,EAMjBjB,EAAQ/F,UAAY,CAClB+C,YAAagD,EAEb0D,MAAO,SAASqB,GAcd,GAbA9N,KAAKmD,KAAO,EACZnD,KAAK8C,KAAO,EAGZ9C,KAAKuL,KAAOvL,KAAKwL,MAAQ1L,EACzBE,KAAKgE,MAAO,EACZhE,KAAKoL,SAAW,KAEhBpL,KAAKmK,OAAS,OACdnK,KAAKoJ,IAAMtJ,EAEXE,KAAKqM,WAAWjJ,QAAQmJ,IAEnBuB,EACH,IAAK,IAAIb,KAAQjN,KAEQ,MAAnBiN,EAAKc,OAAO,IACZvG,EAAOpC,KAAKpF,KAAMiN,KACjBN,OAAOM,EAAK7F,MAAM,MACrBpH,KAAKiN,GAAQnN,IAMrBkO,KAAM,WACJhO,KAAKgE,MAAO,EAEZ,IAAIiK,EAAYjO,KAAKqM,WAAW,GAC5B6B,EAAaD,EAAUzB,WAC3B,GAAwB,UAApB0B,EAAWlM,KACb,MAAMkM,EAAW9E,IAGnB,OAAOpJ,KAAKmO,MAGd1C,kBAAmB,SAAS2C,GAC1B,GAAIpO,KAAKgE,KACP,MAAMoK,EAGR,IAAItF,EAAU9I,KACd,SAASqO,EAAOC,EAAKC,GAYnB,OAXA9D,EAAOzI,KAAO,QACdyI,EAAOrB,IAAMgF,EACbtF,EAAQhG,KAAOwL,EAEXC,IAGFzF,EAAQqB,OAAS,OACjBrB,EAAQM,IAAMtJ,KAGNyO,EAGZ,IAAK,IAAI3B,EAAI5M,KAAKqM,WAAWxM,OAAS,EAAG+M,GAAK,IAAKA,EAAG,CACpD,IAAIhK,EAAQ5C,KAAKqM,WAAWO,GACxBnC,EAAS7H,EAAM4J,WAEnB,GAAqB,SAAjB5J,EAAMqJ,OAIR,OAAOoC,EAAO,OAGhB,GAAIzL,EAAMqJ,QAAUjM,KAAKmD,KAAM,CAC7B,IAAIqL,EAAWhH,EAAOpC,KAAKxC,EAAO,YAC9B6L,EAAajH,EAAOpC,KAAKxC,EAAO,cAEpC,GAAI4L,GAAYC,EAAY,CAC1B,GAAIzO,KAAKmD,KAAOP,EAAMsJ,SACpB,OAAOmC,EAAOzL,EAAMsJ,UAAU,GACzB,GAAIlM,KAAKmD,KAAOP,EAAMuJ,WAC3B,OAAOkC,EAAOzL,EAAMuJ,iBAGjB,GAAIqC,GACT,GAAIxO,KAAKmD,KAAOP,EAAMsJ,SACpB,OAAOmC,EAAOzL,EAAMsJ,UAAU,OAG3B,KAAIuC,EAMT,MAAM,IAAIvD,MAAM,0CALhB,GAAIlL,KAAKmD,KAAOP,EAAMuJ,WACpB,OAAOkC,EAAOzL,EAAMuJ,gBAU9BT,OAAQ,SAAS1J,EAAMoH,GACrB,IAAK,IAAIwD,EAAI5M,KAAKqM,WAAWxM,OAAS,EAAG+M,GAAK,IAAKA,EAAG,CACpD,IAAIhK,EAAQ5C,KAAKqM,WAAWO,GAC5B,GAAIhK,EAAMqJ,QAAUjM,KAAKmD,MACrBqE,EAAOpC,KAAKxC,EAAO,eACnB5C,KAAKmD,KAAOP,EAAMuJ,WAAY,CAChC,IAAIuC,EAAe9L,EACnB,OAIA8L,IACU,UAAT1M,GACS,aAATA,IACD0M,EAAazC,QAAU7C,GACvBA,GAAOsF,EAAavC,aAGtBuC,EAAe,MAGjB,IAAIjE,EAASiE,EAAeA,EAAalC,WAAa,GAItD,OAHA/B,EAAOzI,KAAOA,EACdyI,EAAOrB,IAAMA,EAETsF,GACF1O,KAAKmK,OAAS,OACdnK,KAAK8C,KAAO4L,EAAavC,WAClB1C,GAGFzJ,KAAK2O,SAASlE,IAGvBkE,SAAU,SAASlE,EAAQ2B,GACzB,GAAoB,UAAhB3B,EAAOzI,KACT,MAAMyI,EAAOrB,IAcf,MAXoB,UAAhBqB,EAAOzI,MACS,aAAhByI,EAAOzI,KACThC,KAAK8C,KAAO2H,EAAOrB,IACM,WAAhBqB,EAAOzI,MAChBhC,KAAKmO,KAAOnO,KAAKoJ,IAAMqB,EAAOrB,IAC9BpJ,KAAKmK,OAAS,SACdnK,KAAK8C,KAAO,OACa,WAAhB2H,EAAOzI,MAAqBoK,IACrCpM,KAAK8C,KAAOsJ,GAGP3C,GAGTmF,OAAQ,SAASzC,GACf,IAAK,IAAIS,EAAI5M,KAAKqM,WAAWxM,OAAS,EAAG+M,GAAK,IAAKA,EAAG,CACpD,IAAIhK,EAAQ5C,KAAKqM,WAAWO,GAC5B,GAAIhK,EAAMuJ,aAAeA,EAGvB,OAFAnM,KAAK2O,SAAS/L,EAAM4J,WAAY5J,EAAMwJ,UACtCG,EAAc3J,GACP6G,IAKb,MAAS,SAASwC,GAChB,IAAK,IAAIW,EAAI5M,KAAKqM,WAAWxM,OAAS,EAAG+M,GAAK,IAAKA,EAAG,CACpD,IAAIhK,EAAQ5C,KAAKqM,WAAWO,GAC5B,GAAIhK,EAAMqJ,SAAWA,EAAQ,CAC3B,IAAIxB,EAAS7H,EAAM4J,WACnB,GAAoB,UAAhB/B,EAAOzI,KAAkB,CAC3B,IAAI6M,EAASpE,EAAOrB,IACpBmD,EAAc3J,GAEhB,OAAOiM,GAMX,MAAM,IAAI3D,MAAM,0BAGlB4D,cAAe,SAAS/M,EAAU8J,EAAYC,GAa5C,OAZA9L,KAAKoL,SAAW,CACdvD,SAAUmC,EAAOjI,GACjB8J,WAAYA,EACZC,QAASA,GAGS,SAAhB9L,KAAKmK,SAGPnK,KAAKoJ,IAAMtJ,GAGN2J,IAQJnJ,EA7sBK,CAotBiBD,EAAOC,SAGtC,IACEyO,mBAAqB1H,EACrB,MAAO2H,GAUPC,SAAS,IAAK,yBAAdA,CAAwC5H,K,kCCzuB1C,IAAInI,EAAI,EAAQ,QACZgQ,EAAa,EAAQ,QACrBC,EAAyB,EAAQ,QAIrCjQ,EAAE,CAAEM,OAAQ,SAAUC,OAAO,EAAMuG,OAAQmJ,EAAuB,SAAW,CAC3EC,KAAM,SAAcC,GAClB,OAAOH,EAAWlP,KAAM,IAAK,OAAQqP,O,kCCRzC,IAAIC,EAAU,EAAQ,QAClBjQ,EAAW,EAAQ,QACnBuB,EAAO,EAAQ,QAIfzB,EAAmB,SAAUK,EAAQ+P,EAAUC,EAAQvP,EAAWwP,EAAOC,EAAOC,EAAQC,GAC1F,IAGIC,EAHAC,EAAcL,EACdM,EAAc,EACdC,IAAQL,GAAS/O,EAAK+O,EAAQC,EAAS,GAG3C,MAAOG,EAAc9P,EAAW,CAC9B,GAAI8P,KAAeP,EAAQ,CAGzB,GAFAK,EAAUG,EAAQA,EAAMR,EAAOO,GAAcA,EAAaR,GAAYC,EAAOO,GAEzEL,EAAQ,GAAKJ,EAAQO,GACvBC,EAAc3Q,EAAiBK,EAAQ+P,EAAUM,EAASxQ,EAASwQ,EAAQhQ,QAASiQ,EAAaJ,EAAQ,GAAK,MACzG,CACL,GAAII,GAAe,iBAAkB,MAAMnE,UAAU,sCACrDnM,EAAOsQ,GAAeD,EAGxBC,IAEFC,IAEF,OAAOD,GAGTzP,EAAOC,QAAUnB,G,yCC/BjB,IAAI,EAAS,WAAa,IAAI8Q,EAAIjQ,KAASkQ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACG,YAAY,SAASD,MAAM,CAAC,QAAU,SAAS,MAAQ,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,MAAQ,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,MAAM,YAAY,MAAM,IAAM,EAAQ,WAAyCF,EAAG,MAAMA,EAAG,KAAK,CAACH,EAAIO,GAAG,qEAAqEJ,EAAG,MAAMA,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,SAAS,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,kBAAkB,QAAU,GAAG,MAAQ,YAAY,CAACF,EAAG,SAAS,CAACH,EAAIO,GAAG,wBAAwBP,EAAIO,GAAG,qBAAqB,IAAI,GAAGJ,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,SAAS,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,GAAG,MAAQ,YAAY,KAAO,oBAAoB,CAACF,EAAG,SAAS,CAACH,EAAIO,GAAG,gBAAgBP,EAAIO,GAAG,qBAAqB,IAAI,GAAGJ,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,SAAS,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,6BAA6B,OAAS,SAAS,QAAU,GAAG,MAAQ,gBAAgB,CAACF,EAAG,SAAS,CAACH,EAAIO,GAAG,uBAAuBP,EAAIO,GAAG,oBAAoB,IAAI,GAAGJ,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,SAAS,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,0CAA0C,OAAS,SAAS,QAAU,GAAG,MAAQ,WAAW,CAACF,EAAG,SAAS,CAACH,EAAIO,GAAG,aAAaP,EAAIO,GAAG,iBAAiB,IAAI,IAAI,IAAI,IAAI,GAAGJ,EAAG,QAAQ,CAACA,EAAG,cAAc,CAACA,EAAG,QAAQ,CAACK,YAAY,CAAC,aAAa,OAAOH,MAAM,CAAC,MAAQ,SAAS,QAAU,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,WAAW,CAACF,EAAG,KAAK,CAACG,YAAY,8BAA8BD,MAAM,CAAC,GAAK,mBAAmB,CAACL,EAAIO,GAAG,yBAAyB,GAAGJ,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,SAAS,QAAU,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,WAAW,CAACF,EAAG,KAAK,CAACG,YAAY,gCAAgC,CAACN,EAAIO,GAAG,4BAA4B,GAAGJ,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,SAAS,QAAU,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,OAAO,CAACF,EAAG,cAAc,CAACH,EAAIO,GAAG,mBAAmBJ,EAAG,oBAAoB,CAACE,MAAM,CAAC,MAAQ,OAAO,eAAe,IAAI,MAAQL,EAAIS,qBAAqBC,WAAW,OAAS,GAAG,OAAS,OAAO,CAACV,EAAIO,GAAG,IAAIP,EAAIW,GAAGX,EAAIS,qBAAqBG,aAAa,MAAMZ,EAAIW,GAAGX,EAAIS,qBAAqBC,YAAY,SAAS,IAAI,GAAGP,EAAG,QAAQ,CAACK,YAAY,CAAC,aAAa,OAAOH,MAAM,CAAC,MAAQ,SAAS,QAAU,WAAW,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,WAAW,CAACF,EAAG,KAAK,CAACG,YAAY,8BAA8BD,MAAM,CAAC,GAAK,mBAAmB,CAACL,EAAIO,GAAG,yBAAyB,GAAGJ,EAAG,QAAQ,CAACK,YAAY,CAAC,gBAAgB,QAAQH,MAAM,CAAC,QAAU,WAAWL,EAAIa,GAAIb,EAAa,WAAE,SAASc,EAAG9O,GAAO,OAAOmO,EAAG,QAAQ,CAAC5N,IAAI,KAAOP,EAAMqO,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,SAAS,CAACA,EAAG,cAAc,CAACK,YAAY,CAAC,aAAa,OAAO,OAAS,UAAU,CAACL,EAAG,IAAI,CAACG,YAAY,wCAAwC,CAACN,EAAIO,GAAG,IAAIP,EAAIW,GAAGG,EAAGC,OAAO,OAAOZ,EAAG,IAAI,CAACH,EAAIO,GAAG,IAAIP,EAAIW,GAAGG,EAAGE,KAAKC,OAAO,OAAOd,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,eAAe,CAACN,EAAIO,GAAGP,EAAIW,GAAGG,EAAGI,aAAaf,EAAG,iBAAiB,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,KAAOS,EAAGK,SAAS,OAAS,WAAW,CAACnB,EAAIO,GAAG,oBAAoB,IAAI,IAAI,MAAK,IAAI,IAAI,IAAI,IAC7jGa,EAAkB,G,UCDtB,SAASC,EAAmBC,EAAKhH,EAASC,EAAQgH,EAAOC,EAAQjP,EAAK4G,GACpE,IACE,IAAIwC,EAAO2F,EAAI/O,GAAK4G,GAChB3G,EAAQmJ,EAAKnJ,MACjB,MAAOqI,GAEP,YADAN,EAAOM,GAILc,EAAK5H,KACPuG,EAAQ9H,GAER8K,QAAQhD,QAAQ9H,GAAOmI,KAAK4G,EAAOC,GAIxB,SAASC,EAAkBvI,GACxC,OAAO,WACL,IAAIV,EAAOzI,KACP2R,EAAO/R,UACX,OAAO,IAAI2N,SAAQ,SAAUhD,EAASC,GACpC,IAAI+G,EAAMpI,EAAGyI,MAAMnJ,EAAMkJ,GAEzB,SAASH,EAAM/O,GACb6O,EAAmBC,EAAKhH,EAASC,EAAQgH,EAAOC,EAAQ,OAAQhP,GAGlE,SAASgP,EAAOpJ,GACdiJ,EAAmBC,EAAKhH,EAASC,EAAQgH,EAAOC,EAAQ,QAASpJ,GAGnEmJ,OAAM1R,O,wBC/BN+R,EAAkBC,EAAQ,QAEjBD,IC0Hf,GACE5E,KAAM,OACN8E,WAAY,GACZ7O,KAAM,WACJ,MAAO,CACL8O,UAAW,GACXtB,qBAAsB,CACpBC,WAAY,EAApB,kCACQE,YAAa,EAArB,4BAIEoB,QAAS,WAAX,+IACA,qBADA,qGAAW,GAGTC,QAAS,CACPC,eAAgB,SAApB,KACM,OAAIC,EAAIvS,QAAUwS,EACTD,EAEFA,EAAIhL,MAAM,EAAGiL,GAAO,OAE7BC,cAAe,WAAnB,6JACA,uGADA,cACA,EADA,gBAIA,SAJA,OAMA,IAFA,EAJA,OAKA,IACA,YACA,aACA,mBACA,yBAEA,uCACA,uBAZA,qGAAmB,KClJ2T,I,iJCO9U,SAASC,EAAT,GACE,OAAO,SAAU,EAAV,GACL,IAAK,IAAL,OACOhL,OAAA,gCAAL,IACEvH,KAAA,QAAaA,KAAKwS,MAAlB,MAGJ,IAAK,IAAL,OACExS,KAAA,KAAUA,KAAKwS,MAAf,KAAsCC,EAAtC,KAKS,oBAAW,CACxBvP,KAAM,iBAAO,CACXwP,OADW,GAEXC,WAAY,KAGdC,QANwB,WAStB5S,KAAA,gBAAsBuS,EAAtB,UAA6C,CAAEM,WAAW,IAC1D7S,KAAA,oBAA0BuS,EAA1B,cAAqD,CAAEM,WAAW,O,8ECzBvD,gBAAW,CACxB5F,KADwB,YAGxB6F,MAAO,CACLC,MAAOlM,QAGTqL,QAAS,CACPc,mBADO,SACW,GAA8C,IAApB9P,EAAoB,uDAA9C,GAChB,wBAAWA,EAAP,OAEF,OAAA+P,EAAA,MAAa,0BAFqB,MAIlC,GAEF,kBAAW/P,EAAP,OAEF,OAAA+P,EAAA,MAAa,0BAFqB,MAIlC,IAEE,eAAJ,GACE/P,EAAA,uCACKA,EADQ,OAAb,IAEE,6BAFW,GAGX,yBAAmB6P,KAEZA,IACT7P,EAAA,uCACKA,EADQ,OAAb,qBAEE,GAAS,KAIb,IAGFgQ,aA9BO,SA8BK,GAA8C,IAApBhQ,EAAoB,uDAA9C,GACV,qBAAWA,EAAP,MAIF,OAFA,OAAA+P,EAAA,MAAa,0BAFqB,MAIlC,EAEF,qBAAW/P,EAAP,MAIF,OAFA,OAAA+P,EAAA,MAAa,0BAFqB,MAIlC,EAEF,GAAI,eAAJ,GACE/P,EAAA,uCACKA,EADQ,OAAb,IAEE6P,MAAO,GAAF,OAFM,GAGX,wBAAkBA,UAEf,GAAIA,EAAO,CAChB,MAAmCA,EAAA,4BAAnC,yBAAM,EAAN,KAAM,EAAN,KACA7P,EAAA,uCACKA,EADQ,OAAb,qBAEGiQ,EAAD,UAAwB,IAE1B,IACEjQ,EAAA,MAAW,SAAX,OAGJ,aCrES,gBAAW,CACxB+J,KADwB,aAGxB6F,MAAO,CACLM,UAAW,CAACC,OAAQxM,SAGtByM,SAAU,CACRC,kBADQ,WAEN,OAAOvT,KAAP,WAEFwT,iBAJQ,WAKN,IAAMJ,EAAYpT,KAAlB,kBAEA,aAAIoT,GACAzG,MAAM8G,SAAV,IAD8B,GAE9B,sCAAuBzT,KAAd,YAAiC,O,YCVjC,gBAAW,CACxBiN,KADwB,aAGxB6F,MAAO,CACLY,OAAQ,CAACL,OADJ,QAELM,UAAW,CAACN,OAFP,QAGLO,SAAU,CAACP,OAHN,QAILQ,UAAW,CAACR,OAJP,QAKLS,SAAU,CAACT,OALN,QAMLU,MAAO,CAACV,OAAQxM,SAGlByM,SAAU,CACRU,iBADQ,WAEN,IAAMC,EAAN,GAEMP,EAAS,eAAc1T,KAA7B,QACM6T,EAAY,eAAc7T,KAAhC,WACM8T,EAAW,eAAc9T,KAA/B,UACM2T,EAAY,eAAc3T,KAAhC,WACM4T,EAAW,eAAc5T,KAA/B,UACM+T,EAAQ,eAAc/T,KAA5B,OASA,OAPA,IAAYiU,EAAA,UACZ,IAAeA,EAAA,aACf,IAAcA,EAAA,YACd,IAAeA,EAAA,aACf,IAAcA,EAAA,YACd,IAAWA,EAAA,SAEX,M,gECrCS,SAASC,EAA2BC,EAAGC,GACpD,IAAIC,EAAuB,qBAAX1M,QAA0BwM,EAAExM,OAAOE,WAAasM,EAAE,cAElE,IAAKE,EAAI,CACP,GAAIC,MAAMhF,QAAQ6E,KAAOE,EAAKE,eAA2BJ,KAAOC,GAAkBD,GAAyB,kBAAbA,EAAEtU,OAAqB,CAC/GwU,IAAIF,EAAIE,GACZ,IAAIzH,EAAI,EAEJ4H,EAAI,aAER,MAAO,CACLC,EAAGD,EACHE,EAAG,WACD,OAAI9H,GAAKuH,EAAEtU,OAAe,CACxBmE,MAAM,GAED,CACLA,MAAM,EACNvB,MAAO0R,EAAEvH,OAGb+H,EAAG,SAAWC,GACZ,MAAMA,GAERnU,EAAG+T,GAIP,MAAM,IAAI7I,UAAU,yIAGtB,IAEItD,EAFAwM,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACLL,EAAG,WACDJ,EAAKA,EAAGjP,KAAK+O,IAEfO,EAAG,WACD,IAAIK,EAAOV,EAAGvR,OAEd,OADA+R,EAAmBE,EAAK/Q,KACjB+Q,GAETJ,EAAG,SAAWK,GACZF,GAAS,EACTzM,EAAM2M,GAERvU,EAAG,WACD,IACOoU,GAAoC,MAAhBR,EAAG,WAAmBA,EAAG,YADpD,QAGE,GAAIS,EAAQ,MAAMzM,K,cCjDX,gBAAW,CACxB4E,KADwB,YAGxB6F,MAAO,CACLmC,QAAS,CAACC,QADL,QAELC,KAAMD,SAGR5B,SAAU,CACR8B,eADQ,WAEN,IAAMC,EAAN,GACMJ,EAAU,kBAAOjV,KAAP,QACZ6G,OAAO7G,KADK,UAAhB,IAEIA,KAAKiV,QAET,GAAIjV,KAAJ,KACEqV,EAAA,uBACK,qBAAWJ,EAAsB,CACtC,IADsC,EAChCjL,EAASiL,EAAA,MAAf,KADsC,IAGtC,GAHsC,IAGtC,2BAA4B,KAA5B,EAA4B,QAC1BI,EAAA,4BAJoC,oCAM7BJ,GACTI,EAAA,gBAGF,OAAOA,EAAA,2BACJA,EAAA,KAAD,MAAuB,GADzB,O,wBCZS,SAAAC,EAAA,MAAO,EAAD,QAAN,eAON,CACPrI,KADO,UAGP6F,MAAO,CACLyC,SADK,QAELC,OAFK,QAGLC,IAAK,CACHzT,KADG,OAEH0T,QAAS,QAIbpC,SAAU,CACRqC,QADQ,WAEN,qDACE,WADK,EAEL,oBAAqB3V,KAFhB,SAGL,kBAAmBA,KAHd,QAIFA,KAJE,cAKFA,KALE,kBAMFA,KAAKoV,iBAGZnB,OAXQ,WAYN,OAAOjU,KAAP,mBAIJ4V,OA5BO,SA4BD,GACJ,IAAM1S,EAAO,CACX2S,MAAO7V,KADI,QAEX8V,MAAO9V,KAFI,OAGX+V,GAAI/V,KAAK2S,YAGX,OAAOqD,EACLhW,KADM,IAENA,KAAKgT,mBAAmBhT,KAAxB,MAFM,GAGNA,KAAKiW,OAHP,YCzDJ,I,oBCaA,SAASC,EAAT,KACE,GAAsB,qBAAXC,QAA4B,yBAAvC,QAEA,IAAMC,EAAYC,EAAA,WAAlB,GACM5T,EAAQ4T,EAAd,MACA,EAA6B,+BAEzB,CAAEC,QAAF,EAAkBC,QAAS,IAFzB,EAAN,EAAM,QAAWA,EAAjB,EAAiBA,QAGXC,EAAW,IAAIC,sBAAqB,WAGtC,IAFFnR,EAEE,uDAHsC,KAGtC,uCAEF,GAAKoR,EAAL,UAEA,IAAMC,EAAiBrR,EAAA,MAAa,SAAA1C,GAAK,OAAIA,EAJ3C,mBASA0T,GACGF,EAAD,QACAM,EAAA,SAFF,MAIGN,EAAD,UAECM,EAAA,SAPL,MAUEJ,EAAQhR,EAASkR,EAAjB,GAGEG,GAAkBP,EAAtB,KAAsCQ,EAAtC,GACKF,EAAA,oBAzBP,GA4BAA,EAAA,SAAc,CAAEnW,MAAF,EAAeiW,YAE7BA,EAAAK,QAAA,IAGF,SAASD,EAAT,GAEOF,EAAL,WAEAA,EAAA,4BAAAA,UACOA,EAAP,UAGK,IAAMI,EAAY,CACvBZ,WACAU,UAGF,ICtDe,WAAiB,CAC9B3J,KAD8B,sBAG9B8J,WAAY,CAAEC,aAEdlE,MAAO,CACLmE,OADK,QAELC,cAFK,QAGLC,OAAQ,CACNnV,KAAM,CAACqR,OADD,QAENqC,QAAS,GAEXtT,KAAM,CACJJ,KAAM,CAACqR,OADH,QAEJqC,QAAS,IAEX3B,MAAO,CACL/R,KAAM,CAACqR,OADF,QAELqC,QAAS,GAEXjT,MAAO,CACLT,KAAM,CAACqR,OADF,QAELqC,QAAS,IAIbxS,KAAM,iBAAO,CACXkU,OADW,GAEXC,WAAW,IAGb/D,SAAU,CACRgE,eADQ,WAEN,OAAOjE,OAAOrT,KAAP,OAAqBA,KAAKiX,OAAS,EAA1C,IAGFM,cALQ,WAMN,OAAO,EAAI9Q,KAAJ,GAAczG,KAArB,QAGF2V,QATQ,WAUN,MAAO,CACL,+BAAgC3V,KAD3B,UAEL,qCAAsCA,KAFjC,cAGL,8BAA+BA,KAAKiX,SAIxCO,gBAjBQ,WAkBN,OAAIxX,KAAKyC,MAAT,EACE,EAGEzC,KAAKyC,MAAT,IACE,IAGKgV,WAAWzX,KAAlB,QAGF0X,gBA7BQ,WA8BN,OAAOjR,KAAA,UAAWzG,KAAKuX,eAAvB,KAGFI,iBAjCQ,WAkCN,OAAS,IAAM3X,KAAP,iBAAD,IAAuCA,KAAvC,cAAP,MAGF4X,YArCQ,WAsCN,OAAOvE,OAAOrT,KAAP,QAAsBA,KAAtB,KAAkCA,KAAlC,YAAP,GAGFiU,OAzCQ,WA0CN,MAAO,CACLP,OAAQ,eAAc1T,KADjB,gBAEL+T,MAAO,eAAc/T,KAAD,kBAIxB6X,UAhDQ,WAiDN,MAAO,CACLC,UAAW,UAAF,OAAYzE,OAAOrT,KAAD,QAAlB,UAIb+X,YAtDQ,WAuDN,OAAO/X,KAAKoX,QAAU,EAAI/D,OAAOrT,KAAP,QAAsBA,KAAhD,QAIJkS,QAAS,CACP8F,UADO,SACE,KACP,OAAOhY,KAAKmQ,eAAe,SAAU,CACnC0F,MAAO,wBAAF,OAD8B,GAEnCvF,MAAO,CACL2H,KADK,cAELC,GAAI,EAAIlY,KAFH,YAGLmY,GAAI,EAAInY,KAHH,YAILoY,EAAGpY,KAJE,OAKL,eAAgBA,KALX,YAML,mBAAoBA,KANf,gBAOL,oBAAqBqY,MAI3BC,OAfO,WAgBL,IAAMC,EAAW,CACfvY,KAAKkX,eAAiBlX,KAAKgY,UAAU,WADtB,GAEfhY,KAAKgY,UAAU,UAAWhY,KAF5B,mBAKA,OAAOA,KAAKmQ,eAAe,MAAO,CAChC2F,MAAO9V,KADyB,UAEhCsQ,MAAO,CACLkI,MADK,6BAELC,QAAS,GAAF,OAAKzY,KAAK+X,YAAV,YAAyB/X,KAAK+X,YAA9B,YAA6C,EAAI/X,KAAK+X,YAAtD,YAAqE,EAAI/X,KAAK+X,eAJzF,IAQFW,QA7BO,WA8BL,OAAO1Y,KAAKmQ,eAAe,MAAO,CAChCI,YAAa,6BACZvQ,KAAKiW,OAFR,UAIF0C,UAlCO,SAkCE,OACP3Y,KAAA,cAIJ4V,OAjI8B,SAiIxB,GACJ,OAAOI,EAAE,MAAOhW,KAAKkT,aAAalT,KAAlB,MAA8B,CAC5CuQ,YAD4C,sBAE5CD,MAAO,CACLsI,KADK,cAEL,gBAFK,EAGL,gBAHK,IAIL,gBAAiB5Y,KAAKkX,mBAAgBpX,EAAYE,KAAKwX,iBAEzD3B,MAAO7V,KARqC,QAS5C+W,WAAY,CAAC,CACX9J,KADW,YAEXxK,MAAOzC,KAAK2Y,YAEd7C,MAAO9V,KAbqC,OAc5C+V,GAAI/V,KAAK6Y,aACP,CACF7Y,KADE,SAEFA,KAjBF,eC/IJ,ICCA,SAAS8Y,EAAT,KACE,OAAO,kBAAM,OAAA7F,EAAA,MAAY,OAAD,OAAQ8F,EAAR,4CAAxB,KAUI,kBAGJ,IAAMC,EAAcD,GAAA,EAAkB,CACpCE,SAAUH,EAAgBC,EADU,GAEpCG,WAAYJ,EAAgBC,EAAOI,IAFrC,KAKA,OAAO,cAAW,CAChBlM,KADgB,qBAGhBmM,OAAQ,kBACN,EAAa,CACX1D,QAASsD,MCZX,kBAKJ,OAAO,EAAiB,IAAjB,UAAyD,CAC9D/L,KAD8D,YAG9D6F,MAAO,CACLuG,YAAa,CACXrX,KADW,OAEX0T,QAFW,WAGT,GAAK1V,KAAL,GAEA,OAAOA,KAAKsZ,GAAZ,cAGJC,SAAUrE,SAGZhS,KAf8D,WAgB5D,MAAO,CACLsW,UAAU,IAIdlG,SAAU,CACRmG,aADQ,WAEN,OAAKzZ,KAAL,YAEA,kBACGA,KAAD,YAAoBA,KAAKwZ,UAHG,KAQlC5G,QA/B8D,WAgC5D5S,KAAA,IAAoBA,KAAKsZ,GAAL,SAApBtZ,OAGF0Z,cAnC8D,WAoC5D1Z,KAAA,IAAoBA,KAAKsZ,GAAL,WAApBtZ,OAGFkS,QAAS,CACPyH,OADO,WAEL3Z,KAAA,oBAOU4Z,EAAlB,aChEM,aAAkD,MAA/BC,EAA+B,uDAAlD,QAAmCC,EAAe,uDAAlD,QACJ,OAAO,cAAW,CAChB7M,KADgB,aAGhB8M,MAAO,CAAEF,OAAMC,SAEfhH,MAAO,kBACL,EAAQ,CAAEkH,UAAU,IAGtB9W,KATgB,WAUd,MAAO,CACLsW,WAAYxZ,KAAK6Z,KAIrBI,OAAK,sBACH,GADG,SACH,GACEja,KAAA,gBAFC,sCAIK,KACN,IAAUA,KAAV,IAAwBA,KAAKka,MAAMJ,EAAnC,MALC,KAYU,IAAnB,IC7BMK,EAAiB,CACrBC,SADqB,QAErBC,OAFqB,QAGrBC,MAHqB,QAIrBC,KAJqB,QAKrBC,MALqB,QAMrBC,IAAKvF,SAQD,aAAuC,IAApBwF,EAAoB,uDAAvC,GACJ,OAAO,cAAW,CAChBzN,KADgB,eAEhB6F,MAAO4H,EAAA,OAAkB,eAAmBP,EAArCO,GAAiEP,IAI7D,UCfTQ,G,wCAAahT,OAAnB,eAIMiT,EAAN,GAEA,SAAS9C,EAAT,KACEpB,EAAA,kBACAA,EAAA,wBAGF,SAASmE,EAAT,KACEnE,EAAA,cAAmBjU,EAAnB,WASF,SAASqY,EAAT,GACE,qBAAOnG,EAAA,iBAGT,SAASoG,EAAT,GACE,wBAAOpG,EAAA,iBAGT,IAAMqG,EAAY,SAAC,EAAD,GAId,IADFvY,EACE,uDAJc,GAKZwY,EAAJ,EACIC,EAAJ,EAEA,IAAKH,EAAL,GAAyB,CACvB,IAAM1C,EAAS3B,EAAf,wBACMlX,EAASsb,EAAA,GAAkBnG,EAAA,QAAUA,EAAA,eAA5B,GAAf,EAEAsG,EAASzb,EAAA,QAAiB6Y,EAA1B,KACA6C,EAAS1b,EAAA,QAAiB6Y,EAA1B,IAGF,IAAIjB,EAAJ,EACI+D,EAAJ,GACIzE,EAAA,SAAcA,EAAA,QAAlB,QACEyE,EAAA,IACA/D,EAASV,EAAA,YAAT,EACAU,EAAS3U,EAAA,SAAwB2U,EAAS3Q,KAAA,KAAU,SAACwU,EAAD,cAA0BC,EAAD,EAAnC,IAA1C,GAEA9D,EAAS3Q,KAAA,KAAU,SAAAiQ,EAAA,wBAAsBA,EAAA,aAAhC,IAAT,EAGF,IAAM0E,EAAU,GAAH,QAAO1E,EAAA,YAAD,EAAmBU,GAAtC,EAAa,MACPiE,EAAU,GAAH,QAAO3E,EAAA,aAAD,EAAoBU,GAAvC,EAAa,MAEPkE,EAAI7Y,EAAA,mBAA4BwY,EAAtC,EAAU,MACJM,EAAI9Y,EAAA,mBAA4ByY,EAAtC,EAAU,MAEV,MAAO,CAAE9D,SAAQ+D,QAAOG,IAAGC,IAAGH,UAASC,YAGnCG,GAAU,CAEdC,KAFc,SAEV,KAGuB,IAAzBhZ,EAAyB,uDAHvB,GAKF,GAAKiU,EAAD,SAAgBA,EAAA,QAApB,SAIA,IAAMgF,EAAYC,SAAA,cAAlB,QACMC,EAAYD,SAAA,cAAlB,QAEAD,EAAA,eACAA,EAAA,gCAEIjZ,EAAJ,QACEiZ,EAAA,sBAA2BjZ,EAA3B,QAGF,MAAkDuY,EAAUrG,EAAG+B,EAA/D,GAAM,EAAN,EAAM,SAAN,EAAM,QAAN,EAAM,IAAN,EAAM,IAAN,EAAM,QAAgC2E,EAAtC,EAAsCA,QAEhCjZ,EAAO,GAAH,OAAV,EAAgBgV,EAAN,MACVwE,EAAA,gCACAA,EAAA,cACAA,EAAA,eAEAlF,EAAA,eAEA,IAAMpD,EAAW6C,OAAA,iBAAjB,GACI7C,GAAJ,WAAgBA,EAAA,WACdoD,EAAA,0BACAA,EAAA,mCAGFkF,EAAA,4CACAA,EAAA,8CACA9D,EAAU8D,EAAW,aAAZ,OAAyBN,EAAzB,aAA+BC,EAA/B,qBAA6CJ,EAA7C,YAAsDA,EAAtD,YAAT,EAAS,MACTN,EAAQe,EAAR,GACAA,EAAA,kBAA8B/U,OAAOgV,YAArC,OAEAC,YAAW,WACTF,EAAA,+CACAA,EAAA,yCACA9D,EAAU8D,EAAW,aAAZ,OAAyBR,EAAzB,aAAT,EAAS,qBACTP,EAAQe,EAAR,OAJF,KAQFG,KAlDc,SAkDV,GACF,GAAKrF,GAAOA,EAAR,SAAuBA,EAAA,QAA3B,SAEA,IAAM8E,EAAU9E,EAAA,uBAAhB,uBAEA,OAAI8E,EAAA,OAAJ,CACA,IAAMI,EAAYJ,EAAQA,EAAA,OAA1B,GAEA,IAAII,EAAA,QAAJ,UACKA,EAAA,wBAEL,IAAMI,EAAOH,YAAA,MAAoBxI,OAAOuI,EAAA,QAAxC,WACMK,EAAQxV,KAAA,IAAS,IAAT,EAAd,GAEAqV,YAAW,WACTF,EAAA,4CACAA,EAAA,0CACAf,EAAQe,EAAR,GAEAE,YAAW,WACT,IAAMN,EAAU9E,EAAA,uBAAhB,uBACI,IAAA8E,EAAA,QAAwB9E,EAAA,QAA5B,mBACEA,EAAA,eAAoBA,EAAA,QAApB,wBACOA,EAAA,QAAP,kBAGFkF,EAAA,YAAwBlF,EAAA,YAAekF,EAAvC,cAPF,OALF,QAkBJ,SAASM,GAAT,GACE,MAAwB,qBAAVzZ,KAAd,EAGF,SAAS0Z,GAAT,GACE,IAAM1Z,EAAN,GACMoN,EAAU8E,EAAhB,cAEA,GAAK9E,GAAYA,EAAb,UAAgCA,EAAA,QAAhC,UAA2D8E,EAA/D,IAKA,GAFAA,EAAA,MAEImG,EAAJ,GACEjL,EAAA,mBACAA,EAAA,wBAMA,GAAIA,EAAA,QAAJ,QAA6B,OAO/B,GALApN,EAAA,OAAeoN,EAAA,kBAA4BkL,EAA3C,GACIlL,EAAA,QAAJ,QACEpN,EAAA,MAAcoN,EAAA,QAAd,OAGEiL,EAAJ,GAAqB,CAEnB,GAAIjL,EAAA,QAAJ,gBAAqC,OAErCA,EAAA,wBAAkC,WAChC2L,GAAA,aAEF3L,EAAA,kBAA4BsG,OAAA,YAAkB,WACxCtG,GAAWA,EAAX,SAA8BA,EAAA,QAAlC,kBACEA,EAAA,0BACAA,EAAA,gCAHJ,QAOA2L,GAAA,aAIJ,SAASY,GAAT,GACE,IAAMvM,EAAU8E,EAAhB,cACA,GAAK9E,GAAYA,EAAjB,SAMA,GAJAsG,OAAA,aAAoBtG,EAAA,QAJO,WAQvB,aAAA8E,EAAA,MAAyB9E,EAAA,QAA7B,gBAQE,OAPAA,EAAA,0BACAA,EAAA,wBAF4D,UAK5DA,EAAA,kBAA4BiM,YAAW,WACrCM,GAAA,OAKJjG,OAAA,YAAkB,WACZtG,EAAJ,UACEA,EAAA,uBAGJ2L,GAAA,SAGF,SAASa,GAAT,GACE,IAAMxM,EAAU8E,EAAhB,cAEK9E,GAAYA,EAAjB,UAEIA,EAAA,QAAJ,kBACEA,EAAA,8BAGFsG,OAAA,aAAoBtG,EAAA,QAApB,YAGF,IAAIyM,IAAJ,EAEA,SAASC,GAAT,GACOD,IAAmB3H,EAAA,UAAc,OAAd,OAAgCA,EAAA,UAAc,OAAtE,QACE2H,IAAA,EACAH,GAAA,IAIJ,SAASK,GAAT,GACEF,IAAA,EACAF,GAAA,GAGF,SAASK,GAAT,IACE,IAAIH,KACFA,IAAA,EACAF,GAAA,IAIJ,SAASM,GAAT,OACE,IAAMC,EAAUT,GAAgB7F,EAAhC,OACA,GACEmF,GAAA,QAEF9E,EAAA,QAAaA,EAAA,SAAb,GACAA,EAAA,kBACA,IAAMjU,EAAQ4T,EAAA,OAAd,GACI5T,EAAJ,SACEiU,EAAA,qBAEEjU,EAAJ,QACEiU,EAAA,cAAmBL,EAAA,MAAnB,OAEE5T,EAAJ,SACEiU,EAAA,eAAoBjU,EAApB,QAEEka,IAAJ,GACEjG,EAAA,iCAA8C,CAAEkG,SAAS,IACzDlG,EAAA,+BAA4C,CAAEkG,SAAS,IACvDlG,EAAA,gCAAmD,CAAEkG,SAAS,IAC9DlG,EAAA,mCAEAA,EAAA,iCACAA,EAAA,+BACAA,EAAA,kCAEAA,EAAA,+BACAA,EAAA,6BAEAA,EAAA,wBAb0B,IAgB1BA,EAAA,gCAA6C,CAAEkG,SAAS,MAC9CD,GAAL,GACLE,GAAA,GAIJ,SAASA,GAAT,GACEnG,EAAA,oCACAA,EAAA,qCACAA,EAAA,mCACAA,EAAA,oCACAA,EAAA,sCACAA,EAAA,kCACAA,EAAA,qCACAA,EAAA,kCACAA,EAAA,gCACAA,EAAA,oCACAA,EAAA,+BAGF,SAASoG,GAAT,OACEJ,GAAahG,EAAIL,GAAjB,GAcF,SAAS,GAAT,UACSK,EAAP,QACAmG,GAAA,GAGF,SAASE,GAAT,KACE,GAAI1G,EAAA,QAAkBA,EAAtB,UAIA,IAAM2G,EAAad,GAAgB7F,EAAnC,UACAqG,GAAahG,EAAIL,EAAjB,IAGK,IAAM4G,GAAS,CACpBrc,KADoB,GAEpBgW,OAAA,GACAmG,WAGF,MCtVe,iBAAW,CACxB9P,KADwB,WAGxB8J,WAAY,CACVkG,OAAA,IAGFnK,MAAO,CACLuG,YADK,OAEL6D,OAFK,QAGL3D,SAHK,QAIL4D,MAAO,CACLnb,KADK,QAEL0T,aAAS5V,GAEXsd,UARK,QASLC,iBATK,OAULjO,KAVK,QAWLkO,KAAM,CAACzW,OAXF,QAYL0W,GAAI,CAAC1W,OAZA,QAaL2W,KAbK,QAcLC,QAdK,QAeLC,OAAQ,CACN1b,KAAM,CAACkT,QADD,QAENQ,QAAS,MAEXD,IAnBK,OAoBLjW,OAAQqH,QAGV3D,KAAM,iBAAO,CACXsW,UADW,EAEXmE,WAAY,KAGdrK,SAAU,CACRqC,QADQ,WAEN,IAAMA,EAAN,GAEA,OAAI3V,KAAJ,KAEIA,KAAJ,cAAsB2V,EAAQ3V,KAAR,aAA4BA,KAA5B,UAClBA,KAAJ,aAAqB2V,EAAQ3V,KAAR,YAA2BA,KAA3B,WAHD2V,GAOtBiI,eAXQ,WAWM,MACZ,gBAAO5d,KAAP,WAAwBA,KAAD,UAAkBA,KAAzC,aAEF6d,YAdQ,WAeN,OAAI7d,KAAJ,UAEOkV,QACLlV,KAAK8d,QACL9d,KAAK6Y,WADL,OAEA7Y,KAAK6Y,WAFL,WAGA7Y,KAAK+d,OAJP,WAOFD,OAxBQ,WAyBN,OAAO9d,KAAKud,IAAMvd,KAAX,MAAwBA,KAA/B,MAEFiU,OAAQ,sBAGVgG,MAAO,CACL+D,OAAQ,iBAGV9L,QAAS,CACP+L,MADO,SACF,GACHje,KAAA,kBAEFke,kBAJO,WAIU,MAEf,EADIf,EAAQnd,KAAZ,MAGMkD,GAAI,GACRoN,MAAO,CACL6N,SAAU,aAAcne,KAAd,OAA4BA,KAAK+d,OAAjC,cAAmDje,GAE/D+V,MAAO7V,KAJe,QAKtB8V,MAAO9V,KALe,OAMtB8S,MANsB,GAOtBiE,WAAY,CAAC,CACX9J,KADW,SAEXxK,MAAOzC,KAAK4d,kBATN,iBAWP5d,KAAKud,GAAK,WAAX,KAXQ,iCAYHvd,KAD0B,YAXvB,IAaNie,MAAOje,KAAKie,SAbN,uBAeH,QAfG,GAuBV,GALA,qBAAWje,KAAP,QACFmd,EAAoB,MAAZnd,KAAKud,IACVvd,KAAKud,KAAOhW,OAAOvH,KAAnB,KADH,MACkCA,KAAKud,GAAGa,MAGxCpe,KAAJ,GAAa,CAGX,IAAIqZ,EAAcrZ,KAAlB,YACIqd,EAAmBrd,KAAKqd,kBAA5B,EAEIrd,KAAJ,aACEqZ,EAAc,UAAGA,EAAH,YAAkBrZ,KAAlB,YAAd,OACAqd,EAAmB,UAAGA,EAAH,YAAuBrd,KAAvB,YAAnB,QAGFyV,EAAMzV,KAAKwd,KAAO,YAAlB,cACAjW,OAAA,OAAcrE,EAAd,MAA0B,CACxBqa,GAAIvd,KADoB,GAExBmd,QACAC,UAAWpd,KAHa,UAIxBqZ,cACAgE,mBACAH,OAAQld,KANgB,OAOxByd,QAASzd,KAAKyd,eAGhBhI,GAAOzV,KAAKsd,KAAN,IAAsBtd,KAAtB,MAAN,MAEI,MAAAyV,GAAezV,KAAnB,OAA8BkD,EAAA,WAAmBlD,KAAnB,MAKhC,OAFIA,KAAJ,SAAiBkD,EAAA,aAAqBlD,KAArB,QAEV,CAAEyV,MAAKvS,SAEhBmb,cA9DO,WA8DM,WACX,GAAKre,KAAD,IAAaA,KAAKse,MAAlB,MAAiCte,KAArC,QACA,IAAMqZ,EAAc,UAAGrZ,KAAKqZ,YAAR,YAAuBrZ,KAAK2d,YAA5B,IAApB,OAEMS,EAAO,qBAAH,OAAV,GAEApe,KAAA,WAAe,WAET,eAAqB,QAAD,KAAxB,IACE,gBAIN2Z,OAAQ,gBCtJG,I,UAAA,cAAW,CACxB1M,KADwB,WAGxB6F,MAAO,CACLyL,MADK,QAELC,MAFK,QAGLC,OAHK,QAILC,OAAQxJ,SAGV5B,SAAU,CACRqL,OADQ,WAEN,OAAOzJ,SACJlV,KAAD,SACCA,KADD,QAECA,KAFD,QAGCA,KAJH,SAOF4e,gBATQ,WAUN,MAAO,CACL,kBAAmB5e,KADd,OAEL,gBAAiBA,KAFZ,MAGL,kBAAmBA,KAHd,OAIL,gBAAiBA,KAJZ,MAKL,kBAAmBA,KAAKye,aCD1BI,GAAa,OAAAvJ,EAAA,MAAO,EAAD,QAKvB,EALuB,aAMvB,EAAkB,eAOL,GAAAuJ,GAAA,gBAAoC,CACjD5R,KADiD,QAGjD6F,MAAO,CACLuG,YAAa,CACXrX,KADW,OAEX0T,QAFW,WAGT,OAAK1V,KAAL,UAEOA,KAAK8e,UAAZ,YAF4B,KAKhCC,MATK,QAULC,UAVK,QAWLC,IAXK,QAYLC,KAZK,QAaLC,QAbK,QAcL5J,SAdK,QAeL6J,MAfK,QAgBLC,mBAhBK,QAiBLpK,QAjBK,QAkBLQ,IAAK,CACHzT,KADG,OAEH0T,QAAS,UAEX4J,KAtBK,QAuBLnK,KAvBK,QAwBLnT,KAAM,CACJA,KADI,OAEJ0T,QAAS,UAEXjT,MAAO,MAGTS,KAAM,iBAAO,CACXya,WAAY,kBAGdrK,SAAU,CACRqC,QADQ,WAEN,mFACE,SADK,GAEF,iCAFE,OAAP,IAGE,kBAAmB3V,KAHd,SAIL,eAAgBA,KAJX,MAKL,gBAAiBA,KALZ,OAML,kBAAmBA,KANd,SAOL,qBAAsBA,KAPjB,WAQL,aAAcA,KART,IASL,eAAgBA,KATX,MAUL,gBAAiBA,KAVZ,MAWL,cAAeA,KAXV,KAYL,cAAeA,KAZV,KAaL,iBAAkBA,KAbb,QAcL,kBAAmBA,KAdd,SAeL,eAAgBA,KAfX,MAgBL,eAAgBA,KAhBX,MAiBL,eAAgBA,KAjBX,QAkBL,iBAAkBA,KAlBb,QAmBL,gBAAiBA,KAnBZ,GAoBL,cAAeA,KApBV,KAqBL,cAAeA,KArBV,KAsBL,aAAcA,KAtBT,KAuBFA,KAvBE,cAwBFA,KAxBE,cAyBFA,KAzBE,kBA0BFA,KAAK4e,kBAGZrL,kBA/BQ,WAgCN,IAAIvT,KAAJ,SAEA,OAAO,0CAAP,OAEF4d,eApCQ,WAoCM,MACN2B,GAAgBvf,KAAKkf,OAAQlf,KAAb,KAAwB,CAAEwf,QAAQ,GACxD,OAAIxf,KAAJ,WACK,SAAOA,KAAP,cAEPyf,MAzCQ,WA0CN,OAAQzf,KAAD,OAAeA,KAAf,QAA8BA,KAA9B,WAAgDA,KAAvD,MAEF0f,WA5CQ,WA6CN,OAAOxK,SACJlV,KAAD,OACCA,KADD,OAECA,KAFD,WAGCA,KAHD,YAICA,KAJD,WAKCA,KALD,QAMmB,MAAlBA,KAAKoT,WAAqBC,OAAOrT,KAAP,WAP7B,KAUF2f,QAvDQ,WAwDN,OAAOzK,QACLlV,KAAKkf,MACLlf,KAFF,MAKFiU,OA7DQ,WA8DN,yBACKjU,KAAKgU,oBAKdpB,QA1GiD,WA0G1C,WACCgN,EAAgB,CACpB,CAAC,OADmB,QAEpB,CAAC,UAFmB,YAGpB,CAAC,QAHH,YAOAA,EAAA,SAAsB,YAA4B,0BAA3B,EAA2B,KAA5B,EAA4B,KAC5C,wBAAJ,IAA0C,eAASrQ,EAAUsQ,EAAnB,OAI9C3N,QAAS,CACP+L,MADO,SACF,IAEFje,KAAD,qBAA6BA,KAA7B,KAAyC2U,EAAzC,QAAqD3U,KAAK8f,IAA1D,OACA9f,KAAA,iBAEAA,KAAA,WAAkBA,KAAlB,UAEF+f,WARO,WASL,OAAO/f,KAAKmQ,eAAe,OAAQ,CACjCI,YAAa,kBACZvQ,KAAKiW,OAFR,UAIF+J,UAbO,WAcL,OAAOhgB,KAAKmQ,eAAe,OAAQ,CACjC0F,MAAO,iBACN7V,KAAKiW,OAAOgK,QAAU,CAACjgB,KAAKmQ,eAAe,EAAmB,CAC/D2C,MAAO,CACLoE,eADK,EAEL9U,KAFK,GAGL2R,MAAO,SAMf6B,OAjJiD,SAiJ3C,GACJ,IAAM2C,EAAW,CACfvY,KADe,aAEfA,KAAKmf,SAAWnf,KAFlB,aAIA,EAAsBA,KAAtB,oBAAM,EAAN,EAAM,IAAOkD,EAAb,EAAaA,KACPgd,EAAWlgB,KAAKyf,MAClBzf,KADa,mBAEbA,KAFJ,aAYA,MARA,WAAIyV,IACFvS,EAAA,WAAmBlD,KAAnB,KACAkD,EAAA,eAAuBlD,KAAvB,UAEFkD,EAAA,YAAoB,CAAC,SAAU,UAAUid,SAAS,OAA9B,OAA8B,CAAOngB,KAArC,QAChBA,KADgB,MAEhBogB,KAAA,UAAepgB,KAFnB,OAIOgW,EAAEP,EAAKzV,KAAKuZ,SAAWrW,EAAOgd,EAASlgB,KAAD,MAArC,GAAR,MCjMEqgB,I,wCAAU,CACdC,UADc,gBAEdC,UAAW,UAGb,SAASC,GAAT,GACE,IADgC,EAC1BC,EAAN,GADgC,IAGhB3K,EAAA,MAAYuK,GAA5B,YAHgC,IAGhC,2BAAgD,KAAhD,EAAgD,QAC9C,EAAiB5L,EAAA,MAAQ4L,GAAzB,iCAAI,EAAJ,KAAI,EAAJ,KACA7d,EAAMA,EAAN,OACA,IAIA,kBAAWiQ,IACTA,EAAMA,EAAN,QAEFgO,EAAS,eAAT,QAb8B,8BAgBhC,SASY,cACZ,IAD+B,EACzBC,EAAN,GACI9T,EAAYhN,UAAhB,OAIA,MAAOgN,IAGL,cAAarF,OAAA,KAAY3H,UAAzB,mBACE,OADF,EAAwC,KACtC,GAEE,YACA,iBACMA,UAAA,GAAJ,KACE8gB,EAAA,GAAoBC,GAAaD,EAAD,GAAoB9gB,UAAA,GAApD,KAEF,MACF,YACMA,UAAA,GAAJ,KACE8gB,EAAA,GAAoBE,GAAYF,EAAD,GAAoB9gB,UAAA,GAAnD,KAEF,MAEF,kBACE,IAAKA,UAAA,GAAL,GACE,WAEF,IAAI8gB,EAAA,KACFA,EAAA,OAEEA,EAAJ,KAEEA,EAAA,SAEFA,EAAA,IAAqB9gB,UAAA,MAArB,OACA,MAMF,SACA,eACMA,UAAA,GAAJ,KACE8gB,EAAA,GAAoBG,GAAeH,EAAD,GAAoB9gB,UAAA,GAAtD,KAEF,MAEF,YACA,YACA,eACA,kBACA,kBACA,WACA,iBACE,IAAKA,UAAA,GAAL,GACE,MAEG8gB,EAAL,KACEA,EAAA,OAEFA,EAAA,oCAAyB9gB,UAAA,GAAL,IAA4B8gB,EAAY7G,IAC5D,MAEF,QACO6G,EAAL,KACEA,EAAA,GAAoB9gB,UAAA,GAApB,IAMV,SAGI,iBAIJ,SACA,GAEAJ,EAAS,eAA8B,kBAAXA,EAAsBghB,GAA7B,GAArBhhB,GAEQA,EAAA,OAA6C,kBAAXgQ,EAAsBgR,GAA7B,GAAnC,IAJoBhhB,EADAgQ,EAQhB,iBACJ,SACA,GAEOhQ,EAAS,yBAAH,GAFOgQ,EADAhQ,EAMhB,cAIJ,8CAAc,OAAO,UAAP,8BACd,8CAAc,OAAO,UAAP,8BAId,IAFA,IAAMshB,EAAN,GAESlU,EAAT,EAAgBA,KAAM,CACpB,IAAMxD,EAAN,EAAS,qBAAT,OAAS,YAAT,GACA,IAAK,IAAL,OACOA,EAAL,KAEI0X,EAAJ,GAGEA,EAAA,GAAe,UAAyB1X,EAAzB,GAAqC0X,EAApD,IAGAA,EAAA,GAAc1X,EAAd,IAKN,SC5JF,SAAS2X,KAEkC,UADzCD,EACyC,uDAF3C,GAE2C,mBAF3C,EAE2C,iCAF3C,EAE2C,kBAGzC,OAAO,EAAAxM,SAAA,0BAAP,IAGI,eAGS,IADb0M,EACa,uDAHT,iBAGS,uCAEb,MAAO,CACL/T,OAEAgU,YAHK,EAKLnO,MAAO,CACLoO,MAAO,CACLlf,KADK,QAEL0T,SAAS,GAEXyL,YAAa,CACXnf,KADW,QAEX0T,SAAS,GAEX0L,cAAe,CACbpf,KADa,QAEb0T,SAAS,GAEX2L,KAAM,CACJrf,KADI,OAEJ0T,QAAS2L,GAEXL,OAAQ,CACNhf,KADM,OAEN0T,QAASsL,IAIbpL,OA5BK,SA4BC,KACJ,IAAMH,EAAM,aAAH,OAAgB3M,EAAA,qBAAzB,IACM5F,EAAkB,CACtB4P,MAAO,CACL7F,OACAoU,KAAMvY,EAAA,MAAcuY,MAEtBtL,GAAI,CACFuL,YADE,SACS,GACT5K,EAAA,sBAA2B5N,EAAA,MAA3B,OACA4N,EAAA,4BAAiC5N,EAAA,MAAjC,UA2CN,OAtCIA,EAAA,MAAJ,gBACE5F,EAAA,SAAiB6d,GAAiB7d,EAAA,GAAD,OAAkB,SAAAwT,GACjD,IAAM,EAAN,EAAM,YAAN,EAAM,aAAN,EAAM,YAAsC6K,EAA5C,EAA4CA,aAC5C7K,EAAA,yBAA8B,CAC5B8K,SAAU9K,EAAA,MADkB,SAE5B+D,IAAK/D,EAAA,MAFuB,IAG5B6D,KAAM7D,EAAA,MAHsB,KAI5B3C,MAAO2C,EAAA,MAJqB,MAK5BhD,OAAQgD,EAAA,MAAShD,QAEnBgD,EAAA,0BACAA,EAAA,UAAe+K,EAAf,KACA/K,EAAA,WAAgBgL,EAAhB,KACAhL,EAAA,YAAiBiL,EAAjB,KACAjL,EAAA,aAAkB6K,EAAlB,QAEFre,EAAA,cAAsB6d,GAAiB7d,EAAA,GAAD,YAAuB,SAAAwT,GAC3D,GAAIA,GAAMA,EAAV,yBAAuC,CACrC,MAA+CA,EAA/C,yBAAM,EAAN,EAAM,WAAN,EAAM,MAAN,EAAM,OAAN,EAAM,MAA8BhD,EAApC,EAAoCA,cAC7BgD,EAAP,yBACAA,EAAA,eAAoB8K,GAApB,GACA9K,EAAA,UAAe+D,GAAf,GACA/D,EAAA,WAAgB6D,GAAhB,GACA7D,EAAA,YAAiB3C,GAAjB,GACA2C,EAAA,aAAkBhD,GAAlB,QAIF5K,EAAA,MAAJ,cACE5F,EAAA,SAAiB6d,GAAiB7d,EAAA,GAAD,OAAkB,SAAAwT,GAChDA,EAAA,gBAA6BA,EAAA,MAA7B,QACDA,EAAA,wBAEFxT,EAAA,cAAsB6d,GAAiB7d,EAAA,GAAD,YAAuB,SAAAwT,GAC3D,IAAQA,EAAA,cAAoBA,EAAA,iBAApB,QAILV,EAAEP,EAAKmM,GAAU9Y,EAAD,KAAf,GAAqCA,EAA7C,YAKA,iBAGW,IAAfuY,EAAe,uDAHX,SAKJ,MAAO,CACLpU,OAEAgU,YAHK,EAKLnO,MAAO,CACLuO,KAAM,CACJrf,KADI,OAEJ0T,QAAS2L,IAIbzL,OAZK,SAYC,KACJ,OAAOI,EAAE,aAEP4L,GAAU9Y,EAAD,KAAe,CACtBgK,MAAO,CAAE7F,QACT8I,GAAI8L,IAEN/Y,EANF,YC5GQ,kBAA8C,IAAnCgZ,EAAmC,uDAA9C,GAAqCxG,EAAS,wDACpDyG,EAAezG,EAAI,QAAzB,SACM0G,EAAiB,SAAH,OAAY,eAAhC,IAEA,MAAO,CACLV,YADK,SACM,GACT5K,EAAA,QAAaA,EAAb,WACAA,EAAA,8BACEuL,WAAYvL,EAAA,MADK,WAEjBwL,SAAUxL,EAAA,MAFO,UAGjB,EAAgBA,EAAA,WAIpByL,MAVK,SAUA,GACH,IAAMC,EAAe1L,EAArB,cAEAA,EAAA,sCAH0B,aAK1BA,EAAA,wBACA,IAAM2B,EAAS,GAAH,OAAM3B,EAAlB,GAAY,MAEZA,EAAA,aAEKA,EAVqB,aAY1BA,EAAA,iBAAsB0L,EAAtB,WAEIN,GAAuBpL,EAA3B,SACEA,EAAA,yBAGF2L,uBAAsB,WACpB3L,EAAA,eAIJ4L,WAjCK,EAkCLC,eAlCK,EAoCLC,MApCK,SAoCA,GACH9L,EAAA,8BACEuL,WADiB,GAEjBC,SAAUxL,EAAA,MAFO,UAGjB,EAAgBA,EAAA,UAGlBA,EAAA,wBACAA,EAAA,mBAA4BA,EAA5B,SACKA,EATqB,aAW1B2L,uBAAsB,kBAAO3L,EAAA,SAA7B,QAGF+L,aACAC,eAAgBD,GAGlB,cACMX,GAAuBpL,EAA3B,SACEA,EAAA,4BAEFiM,EAAA,GAGF,cACE,IAAMvgB,EAAOsU,EAAA,cAAb,GACAA,EAAA,eAAoBA,EAAA,cAApB,SACA,MAAItU,IAAcsU,EAAA,mBACXA,EAAP,gBC9DSkM,IAXsBC,GAA5B,uBACmCA,GAAnC,+BACuBA,GAAvB,kBAC8BA,GAA9B,0BACwBA,GAAxB,mBACuBA,GAAuB,iBAAkB,gBAAhE,UAG0BA,GAA1B,qBACgCA,GAAhC,4BAC6BA,GAA7B,yBACwBA,GAAxB,oBAMMC,IALmBD,GAAzB,oBAC2BA,GAA3B,uBACkCA,GAAlC,+BAC2BA,GAA3B,uBACkCA,GAAlC,+BAC0BA,GAA1B,uBACiCA,GAAjC,8BAC0BA,GAA1B,sBACiCA,GAAjC,8BAG0BE,GAA2B,oBAAqB,MAC/CA,GAA2B,sBAAuB,GAA0B,IAAvG,ICxBD,cAEY,IADhBlJ,EACgB,uDAFZ,QAEJC,EAAgB,uDAFZ,SAIJ,OAAO,cAAW,CAChB7M,KADgB,YAGhB8M,MAAO,CACLF,OACAC,SAGFhH,MAAO,kBACL,EAAQ,CACNkH,UAAU,IAId9W,KAdgB,WAed,MAAO,CACL8f,kBAAmBhjB,KAAK6Z,KAI5BvG,SAAU,CACR2P,cAAe,CACbzf,IADa,WAEX,OAAOxD,KAAP,mBAEFqB,IAJa,SAIV,GACGoR,IAAQzS,KAAZ,oBAEAA,KAAA,oBAEAA,KAAA,eAKNia,MAAO,kBACL,GADG,SACH,GACEja,KAAA,yBAOR,IAAMkjB,GAAY,KAElB,MCjCM,GAAa,OAAA5N,EAAA,MAAO,EAExB,EAAoB,CAAC,WAAY,QAAS,MAFnB,cAAzB,QAQe,aAAkB,CAC/BrI,KAD+B,oBAG/B8J,WAAY,CAAEC,aAEdlE,MAAO,CACLqQ,OAAQ,CACNnhB,KADM,QAEN0T,SAAS,GAEX0N,gBAAiB,CACfphB,KADe,OAEf0T,QAAS,MAEX2N,kBAAmB,CACjBrhB,KAAM,CAACqR,OADU,QAEjBqC,QAAS,MAEX4N,YAAa,CACXthB,KAAM,CAACqR,OADI,QAEXqC,QAAS,KAEX3C,MAAO,CACL/Q,KADK,OAEL0T,QAAS,WAEXhC,OAAQ,CACN1R,KAAM,CAACqR,OADD,QAENqC,QAAS,GAEXwB,cAzBK,QA0BLqM,MA1BK,QA2BL3V,QA3BK,QA4BLqH,QA5BK,QA6BLuO,OA7BK,QA8BLC,QA9BK,QA+BLhhB,MAAO,CACLT,KAAM,CAACqR,OADF,QAELqC,QAAS,IAIbxS,KA1C+B,WA2C7B,MAAO,CACL8f,kBAAmBhjB,KAAKyC,OADnB,EAEL4U,WAAW,IAIf/D,SAAU,CACRoQ,mBADQ,WAEN,OAAO1jB,KAAKmQ,eAAe,MAAOnQ,KAAKgT,mBAAmBhT,KAAKojB,iBAAmBpjB,KAAhD,MAA4D,CAC5FuQ,YAD4F,gCAE5FuF,MAAO9V,KAAK2jB,oBAGhBC,YAPQ,WAQN,OAAO5jB,KAAKmQ,eAAenQ,KAApB,mBAA6C,CAACA,KAArD,mBAEF6jB,gBAVQ,WAWN,OAAO7jB,KAAKkX,cAAgBlX,KAArB,sBAAkDA,KAAzD,qBAEF8jB,eAbQ,WAcN,OAAO9jB,KAAKmQ,eAAe,MAAO,CAChCI,YADgC,4BAEhCuF,MAAO9V,KAAKiU,UAGhB8P,oBAnBQ,WAoBN,OAAO/jB,KAAKmQ,eAAe,MAAOnQ,KAAKgT,mBAAmBhT,KAAxB,MAAoC,CACpEuQ,YADoE,iCAEpEuF,MAAO,CACL/B,MAAO,eAAc/T,KAAD,0BAI1BgkB,sBA3BQ,WA4BN,OAAOhkB,KAAKmQ,eAAe,MAAO,CAChCI,YADgC,mCAEhCsF,MAAO,CACL,2CAA4C7V,KAAKmjB,SAElD,CACDnjB,KAAKikB,eADJ,QAEDjkB,KAAKikB,eAPP,YAUFC,eAtCQ,WAuCN,OAAKlkB,KAAL,OAEOA,KAAKmQ,eAAe,MAAOnQ,KAAKkT,aAAalT,KAAlB,MAA8B,CAC9DuQ,YAD8D,4BAE9DuF,MAAO,CACL/B,MAAO,eAAc,IAAM/T,KAAP,0BALC,MAS3B2jB,gBAhDQ,WAgDO,MACPN,EAA8C,MAA1BrjB,KAAKqjB,kBAC1BrjB,KAAKojB,gBAAkB,EADF,GAEtB3L,WAAWzX,KAFf,mBAIA,UACE6a,QADK,GAAP,iBAEG7a,KAAKmkB,WAAa,QAAnB,OAAsC,eAAcnkB,KAAD,gBAF9C,MAAP,yBAGS,eAAcyG,KAAA,MAAYzG,KAAKokB,iBAAmBpkB,KAArC,uBAHtB,GAMF2V,QA3DQ,WA4DN,uBACE,8BAA+B3V,KAD1B,SAEL,2BAA4BA,KAFvB,MAGL,2BAA4BA,KAHvB,MAIL,8BAA+BA,KAJ1B,SAKL,6BAA8BA,KALzB,WAML,6BAA8BA,KANzB,QAOL,6BAA8BA,KAPzB,QAQL,6BAA8BA,KARzB,WASFA,KAAKqkB,eAGZC,mBAxEQ,WAyEN,OAAOtkB,KAAKkX,cAAgB0L,GAA5B,IAEFuB,WA3EQ,WA4EN,OAAOnkB,KAAKukB,SAASC,MAAQxkB,KAA7B,SAEFokB,iBA9EQ,WA+EN,OAAOpkB,KAAKykB,UAAUzkB,KAAtB,cAEFwX,gBAjFQ,WAkFN,OAAOxX,KAAKykB,UAAUzkB,KAAtB,oBAEF0kB,SApFQ,WAqFN,OAAOxP,QAAQlV,KAAK6Y,WAApB,SAEF5E,OAvFQ,WAwFN,IAAMA,EAAN,GAUA,OARKjU,KAAL,SACEiU,EAAA,UAGGjU,KAAD,eAAJ,MAA2ByX,WAAWzX,KAAX,oBACzBiU,EAAA,MAAe,eAAcjU,KAAD,iBAA5B,MAGF,IAIJkS,QAAS,CACP6N,WADO,WAEL,IAAM4E,EAAO,eAAQ3kB,KAAM,UAAW,CAAEyC,MAAOzC,KAAKgjB,oBAEpD,SAEOhjB,KAAKmQ,eAAe,MAAO,CAChCI,YAAa,8BADf,GAFkB,MAMpBqU,aAVO,WAWL,IAAMC,EAAY7kB,KAAlB,WAMA,OAJIA,KAAJ,WACE6kB,EAAA,MAAkB7kB,KAAlB,SAGF,GAEFikB,eAnBO,SAmBO,GACZ,OAAOjkB,KAAKmQ,eAAe,MAAOnQ,KAAKgT,mBAAmBhT,KAAxB,MAAoC,CACpEuQ,YADoE,mCAEpEsF,MAAO,kBACL,GAAQ,OAIdiP,QA3BO,SA2BA,GACL,GAAK9kB,KAAL,UAEA,MAAkBA,KAAK8f,IAAvB,wBAAQ/L,EAAR,EAAQA,MAER/T,KAAA,cAAqB2U,EAAA,UAArB,MAEFgE,UAlCO,SAkCE,OACP3Y,KAAA,aAEFykB,UArCO,SAqCE,GACP,OAAIhiB,EAAJ,EAAsB,EAClBA,EAAJ,IAAwB,IACjBgV,WAAP,KAIJ7B,OAnM+B,SAmMzB,GACJ,IAAM1S,EAAO,CACXqN,YADW,oBAEXD,MAAO,CACLsI,KADK,cAEL,gBAFK,EAGL,gBAAiB5Y,KAHZ,iBAIL,gBAAiBA,KAAKkX,mBAAgBpX,EAAYE,KAAKwX,iBAEzD3B,MAAO7V,KARI,QASX+W,WAAY,CAAC,CACX9J,KADW,YAEXxK,MAAOzC,KAAK2Y,YAEd7C,MAAO,CACLuE,OAAQra,KAAKqa,OAAS,OADjB,EAEL3G,OAAQ1T,KAAKmjB,OAAS,eAAcnjB,KAA5B,QAFH,EAGLya,IAAKza,KAAKya,IAAM,OAAI3a,GAEtBiW,GAAI/V,KAAK4kB,gBAGX,OAAO5O,EAAE,MAAO9S,EAAM,CACpBlD,KADoB,eAEpBA,KAFoB,mBAGpBA,KAHoB,eAIpBA,KAJoB,YAKpBA,KALF,kBCvPJ,MCce,0BAA+B,CAC5CiN,KAD4C,WAG5C6F,MAAO,CACLqM,QAAS,CACPnd,KAAM,CAACkT,QADA,QAEPQ,SAAS,GAEXqP,aAAc,CACZ/iB,KAAM,CAACqR,OADK,QAEZqC,QAAS,IAIbxD,QAAS,CACP8S,YADO,WAEL,WAAIhlB,KAAKmf,QAA0B,KAE5Bnf,KAAKiW,OAAOgP,UAAYjlB,KAAKmQ,eAAe,GAAiB,CAClE2C,MAAO,CACLsH,UADK,EAELrH,OAAyB,IAAjB/S,KAAKmf,SAAN,KAA0Bnf,KAAKmf,QACjCnf,KAAK+S,OADH,UAEH/S,KAJC,QAKL0T,OAAQ1T,KALH,aAMLkX,eAAe,SCzBV,UAAA5B,EAAA,MAAO,GAAD,GAAN,UAIN,CACPrI,KADO,SAGP6F,MAAO,CACLpT,KADK,QAELwlB,MAFK,QAGLC,IAHK,OAIL/V,KAJK,QAKL2V,aAAc,CACZ/iB,KAAM,CAACqR,OADK,QAEZqC,QAAS,GAEX0P,OAAQlQ,SAGV5B,SAAU,CACRqC,QADQ,WAEN,sCACE,UADK,GAEF,iCAFE,OAAP,IAGE,eAAgB3V,KAHX,KAIL,gBAAiBA,KAJZ,MAKL,eAAgBA,KALX,YAML,kBAAmBA,KANd,QAOL,mBAAoBA,KAPf,SAQL,iBAAkBA,KARb,QASF,wCAGPiU,OAdQ,WAeN,IAAM6B,EAAK,kBACN,sCAOL,OAJI9V,KAAJ,MACE8V,EAAA,0BAA2B9V,KAA3B,2CAGF,IAIJkS,QAAS,CACP8S,YADO,WAEL,IAAMpP,EAAS,oCAAf,MAEA,SAEO5V,KAAKmQ,eAAe,MAAO,CAChCI,YADgC,mBAEhC/N,IAAK,YACJ,CAHH,IAFoB,OASxBoT,OAvDO,SAuDD,GACJ,MAAsB5V,KAAtB,oBAAM,EAAN,EAAM,IAAOkD,EAAb,EAAaA,KASb,OAPAA,EAAA,MAAalD,KAAb,OAEIA,KAAJ,cACEkD,EAAA,MAAaA,EAAA,OAAb,GACAA,EAAA,kBAGK8S,EAAEP,EAAKzV,KAAKgT,mBAAmBhT,KAAxB,MAAN,GAAiD,CACvDA,KADuD,cAEvDA,KAAKiW,OAFP,aCnFEoP,GAAe,eAArB,mBAEMC,IADgB,eAAtB,oBACkB,eAAlB,iBCEMC,IDDa,eAAnB,iB,wCCCoB,CAAC,KAAM,KAAM,KAAjC,OAEMC,GAAmB,WACvB,OAAOD,GAAA,QAAmB,cAKxB,OAJAzS,EAAA,GAAa,CACX9Q,KAAM,CAACkT,QAASrO,OADL,QAEX6O,SAAS,GAEX,IALF,IADuB,GAUnB+P,GAAe,WACnB,OAAOF,GAAA,QAAmB,cAKxB,OAJAzS,EAAM,SAAW,eAAjB,IAAoC,CAClC9Q,KAAM,CAAC6E,OAD2B,QAElC6O,QAAS,MAEX,IALF,IADmB,GAUfgQ,GAAc,WAClB,OAAOH,GAAA,QAAmB,cAKxB,OAJAzS,EAAM,QAAU,eAAhB,IAAmC,CACjC9Q,KAAM,CAAC6E,OAD0B,QAEjC6O,QAAS,MAEX,IALF,IADkB,GAUdiQ,GAAU,CACdC,IAAKre,OAAA,KADS,IAEd8Q,OAAQ9Q,OAAA,KAFM,IAGdse,MAAOte,OAAA,UAGT,SAASue,GAAT,OACE,IAAIC,EAAJ,EACA,GAAI,MAAAtT,IAAJ,IAAmBA,EAAnB,CAGA,KAAU,CACR,IAAMuT,EAAanM,EAAA,UAAnB,IACAkM,GAAa,IAAJ,OAAT,GAKF,MAAI,QAAA/jB,GAAmB,KAAAyQ,IAAvB,IAAqCA,GAKrCsT,GAAa,IAAJ,OAAT,GACOA,EAAP,eAJSA,EAAP,eAOJ,IAAME,GAAQ,IAAd,IAEe,iBAAW,CACxBhZ,KADwB,QAExBgU,YAFwB,EAGxBnO,MAAO,6DACLoT,KAAM,CACJlkB,KAAM,CAACkT,QAASrO,OADZ,QAEJ6O,SAAS,IAHN,IAAF,IAMH2C,OAAQ,CACNrW,KAAM,CAAC6E,OADD,QAEN6O,QAAS,OARN,IAAF,IAWHmQ,MAAO,CACL7jB,KAAM,CAAC6E,OADF,QAEL6O,QAAS,OAbN,IAAF,IAgBHyQ,UAAW,CACTnkB,KADS,OAET0T,QAFS,KAGT0Q,UAAY,SAAAhU,GAAD,MAAc,CAAC,OAAQ,QAAS,MAAO,SAAU,WAAY,WAAW+N,SAAS/N,KAE9FqD,IAAK,CACHzT,KADG,OAEH0T,QAAS,SAGbE,OA7BwB,SA6BlB,EA7BkB,GA6BoB,IAAjC,EAAiC,EAAjC,QAAiC,EAAjC,OAAiC,EAAjC,SAELyQ,GAFsC,EAARlN,OAElC,IACA,IAAK,IAAL,OACEkN,GAAYxf,OAAQiM,EAApB,IAEF,IAAIwT,EAAYL,GAAA,IAAhB,GA4BA,OA1BA,GAAgB,iBAGd,EACA,SAHAK,EADc,GAId,GACEX,GAAA,YAAsB,SAAA9L,GACpB,IAAMpX,EAAoCqQ,EAA1C,GACMiT,EAAYD,GAAgB9jB,EAAM6X,EAAxC,GACA,GAAeyM,EAAA,WAInB,IAAMC,EAAgBD,EAAA,MAAe,SAAAP,GAAS,OAAIA,EAAA,WAAlD,WAEAO,EAAA,SAEEV,KAAMW,IAAkBzT,EAFX,MAAf,+BAGUA,EAAR,MAAuBA,EAHV,MAAf,kCAIaA,EAAX,QAA4BA,EAJf,QAAf,iCAKYA,EAAV,OAA0BA,EALb,OAAf,sCAMiBA,EAAf,WAAmCA,EAAMqT,WAN3C,IASAF,GAAA,SAvBc,GA0BTjQ,EAAElD,EAAD,IAAY8O,GAAU1e,EAAM,CAAE2S,MAAOyQ,IAA7C,M,oBChIU,eAEZ,OAAO,cAAW,CAChBrZ,KAAM,KAAF,OADY,GAGhBgU,YAHgB,EAKhBnO,MAAO,CACL0T,GADK,OAEL/Q,IAAK,CACHzT,KADG,OAEH0T,QAAS,QAIbE,OAbgB,SAaV,EAbU,GAaoB,IAAzB,EAAyB,EAAzB,QAAyB,EAAzB,KAAe2C,EAAU,EAAVA,SACxBrV,EAAA,YAAoB,UAAG+J,EAAH,YAAW/J,EAAA,aAAZ,IAAnB,OAEA,IAAQoN,EAAR,EAAQA,MACR,KAAW,CAETpN,EAAA,SACA,IAAMyS,EAAUpO,OAAA,gBAA0B,SAAA/E,GAGxC,YAAIA,EAAgB,OAAO,EAE3B,IAAMC,EAAQ6N,EALgC,GAS9C,OAAI9N,EAAA,WAAJ,UACEU,EAAA,YACA,GAGKT,GAAP,kBAAuBA,KAGrBkT,EAAJ,SAAoBzS,EAAA,wBAAwByS,EAAA,KAAxB,OAQtB,OALI7C,EAAJ,KACE5P,EAAA,SAAgBA,EAAA,UAAhB,GACAA,EAAA,YAAmB4P,EAAnB,IAGKkD,EAAElD,EAAD,MAAR,MC1CS,ICQf,GDRe,0BAAyB,CACtC7F,KADsC,cAEtCgU,YAFsC,EAGtCnO,MAAO,CACL0T,GADK,OAEL/Q,IAAK,CACHzT,KADG,OAEH0T,QAAS,OAEX+Q,MAAO,CACLzkB,KADK,QAEL0T,SAAS,IAGbE,OAdsC,SAchC,EAdgC,GAcF,IAClC,EADS,EAAyB,EAAzB,QAAyB,EAAzB,KAAe2C,EAAU,EAAVA,SAEhBjI,EAAR,EAAQA,MA2BR,OA1BA,IAEEpN,EAAA,SACAyS,EAAUpO,OAAA,gBAA0B,SAAA/E,GAGlC,YAAIA,EAAgB,OAAO,EAE3B,IAAMC,EAAQ6N,EAL0B,GASxC,OAAI9N,EAAA,WAAJ,UACEU,EAAA,YACA,GAGKT,GAAP,kBAAuBA,MAIvBqQ,EAAJ,KACE5P,EAAA,SAAgBA,EAAA,UAAhB,GACAA,EAAA,YAAmB4P,EAAnB,IAGKkD,EACLlD,EADM,IAEN8O,GAAU1e,EAAM,CACdqN,YADc,YAEdsF,MAAOvB,MAAW,CAChB,mBAAoBxB,EAAM2T,QADrB,OAEG9Q,GAFH,MAJX,M,8BC1BJ,SAAS+Q,GAAT,GACE,MAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAOC,MAAK,SAAAlU,GAAG,OAAImU,EAAA,SAA9D,MAGF,SAASC,GAAT,GACE,MAAQ,0CAA0CC,KAAK5H,IAAS,UAAU4H,KAAlE,IAAgF5H,EAAA,OAAxF,GAdF,YACE,mBACA,kBACA,oBACA,mBACA,kBACA,oBANF,CAAK6H,QAAL,KAiBA,IAAM,GAAQ,OAAAzR,EAAA,MAAO,EAAD,KAIlB,QAJY,OAML,CACPrI,KADO,SAGP6F,MAAO,CACLkU,MADK,QAELzN,SAFK,QAGLgB,KAHK,QAILC,MAJK,QAKLpY,KAAM,CAACiR,OALF,QAMLoC,IAAK,CACHzT,KADG,OAEHgY,UAFG,EAGHtE,QAAS,MAIbpC,SAAU,CACRqL,OADQ,WAEN,UAEFsI,iBAJQ,WAKN,OAAO/R,QACLlV,KAAK2S,WAAWsL,OAASje,KAAK2S,WADhC,aAMJT,QAAS,CACPgV,QADO,WAEL,IAAIC,EAAJ,GAGA,OAFInnB,KAAKiW,OAAT,UAAyBkR,EAAWnnB,KAAKiW,OAAOP,QAAQ,GAAG4J,KAAlC,QAElB,eAAkBtf,KAAzB,IAEFonB,QAPO,WAQL,IAAMC,EAAQ,CACZ3I,OAAQ1e,KADI,OAEZwe,MAAOxe,KAFK,MAGZ2e,OAAQ3e,KAHI,OAIZue,MAAOve,KAJK,MAKZye,OAAQze,KAAKye,QAGT6I,EAAe,wBAAiB,SAAA9kB,GAAG,OAAI6kB,EAA7C,MAEA,OACGC,GAAgBP,GAAjB,IAA4C,eAAc/mB,KAD5D,OAKFunB,eAvBO,WAwBL,MAAO,CACLhX,YADK,qBAELsF,MAAO,CACL,mBAAoB7V,KADf,SAEL,eAAgBA,KAFX,KAGL,eAAgBA,KAHX,iBAIL,gBAAiBA,KAJZ,MAKL,gBAAiBA,KAAKgnB,OAExB1W,MAAO,gBACL,eAAgBtQ,KADX,iBAELuZ,SAAUvZ,KAAKinB,kBAAoBjnB,KAF9B,SAGLgC,KAAMhC,KAAKinB,iBAAmB,cAHzB,GAIFjnB,KAAK0S,QAEVqD,GAAI/V,KAAK2S,aAGb6U,kBA1CO,WA2CL,IAAMC,EAAWznB,KAAjB,UACM0nB,EAAc,iCACf1nB,KADe,kBAAH,IAEf8V,MAAO2R,EAAW,CAChBA,WACA/T,OAFgB,EAGhBK,MAAO0T,QACL3nB,IAIN,OAFAE,KAAA,eAEA,GAEF2nB,YAxDO,SAwDI,GACTzkB,EAAA,uCAAkBA,EAAL,OAAoBlD,KAAKqkB,cACtCrkB,KAAA,aAAkBA,KAAlB,UAEF4nB,eA5DO,SA4DO,KACZ,IAAMC,EAAN,GACM3kB,EAAOlD,KAAb,iBAEI4mB,EAJwC,iBAOtCkB,EAAiB5I,EAAA,QAAvB,KACM6I,EAAiBD,IAAvB,EAEA,EAEED,EAAA,SAEAjB,EAAW1H,EAAA,QAAX,GACIwH,GAAJ,KAA8BE,EAAA,KAGhC1jB,EAAA,YACAA,EAAA,YAEA,IAAMukB,EAAWznB,KAAjB,UAKA,OAJA,IAAckD,EAAA,MAAa,CAAEukB,aAE7BznB,KAAA,eAEOgW,EAAEhW,KAAKinB,iBAAmB,SAAWjnB,KAApC,MAAR,IAEFgoB,cAxFO,SAwFM,KACX,IAAMC,EAAqB,CACzBpS,MADyB,cAEzBvF,MAAO,CACLkI,MADK,6BAELC,QAFK,YAGLG,KAHK,MAIL,eAAe,IAIbxW,EAAOpC,KAAb,UASA,OARA,IACEioB,EAAA,MAAgB,CACdR,SADc,EAEd/T,OAFc,EAGdK,MAAO3R,IAIJ4T,EAAEhW,KAAKinB,iBAAmB,SAAzB,OAA4CjnB,KAA5C,oBAAsE,CAC5EgW,EAAE,MAAOiS,EAAS,CAChBjS,EAAE,OAAQ,CACR1F,MAAO,CACL4X,EAAGhJ,UAMbiJ,uBAtHO,SAsHe,KAIpB,IAAMjlB,EAAkB,CACtB2S,MAAO,CACL,qBAAqB,IAInBzT,EAAOpC,KAAb,UACA,IACEkD,EAAA,MAAa,CACXukB,SADW,EAEX/T,OAFW,EAGXK,MAAO3R,IAIXpC,KAAA,eAEA,IAAMooB,EAAYlJ,EAAlB,UAIA,OAHAhc,EAAA,MAAagc,EAAb,MACAhc,EAAA,SAAgBA,EAAhB,GAEO8S,EAAEhW,KAAKinB,iBAAmB,SAAzB,OAA4CjnB,KAA5C,oBAAsE,CAC5EgW,EAAEoS,EADJ,OAMJxS,OAhLO,SAgLD,GACJ,IAAMsJ,EAAOlf,KAAb,UAEA,wBAAWkf,EACL2H,GAAJ,GACS7mB,KAAKgoB,cAAc9I,EAA1B,GAEKlf,KAAK4nB,eAAe1I,EAA3B,GAGKlf,KAAKmoB,uBAAuBjJ,EAAnC,MAIW,iBAAW,CACxBjS,KADwB,SAGxBob,aAHwB,GAKxBpH,YALwB,EAOxBrL,OAPwB,SAOlB,EAPkB,GAOK,IAAlB,EAAkB,EAAlB,KAAQ2C,EAAU,EAAVA,SACb4O,EADuB,GAe3B,OAXIjkB,EAAJ,WACEikB,EAAWjkB,EAAA,sBACTA,EAAA,SADS,WADM,SAOVA,EAAA,SAAP,mBACOA,EAAA,SAAP,WAGK8S,EAAE,GAAD,EAAcmR,EAAW,CAAH,GAA9B,MC/OW,I,8BAAA,OAAA7R,EAAA,gBAA0B,CACvCrI,KADuC,eAGvC6F,MAAO,CACLwV,YAAa,CAACzhB,OADT,QAEL0hB,aAAc1hB,QAGhByM,SAAU,CACRkV,oBADQ,WAEN,OAAOnV,OAAOrT,KAAd,cAEFyoB,YAJQ,WAKN,OAAOzoB,KAAKwoB,oBACR,CAAEE,cAAgB,EAAI1oB,KAAL,wBAAuC,UAD5D,GAIF2oB,cATQ,WAUN,OAAK3oB,KAAL,YAEOA,KAAKmQ,eAAe,MAAO,CAChC2F,MAAO9V,KADyB,YAEhCuQ,YAAa,wBAJe,KASlC2B,QAAS,CACP6N,WADO,WAEL,OAAO/f,KAAKmQ,eAAe,MAAO,CAChCI,YADgC,wBAEhCsF,MAAO7V,KAAKuoB,cACXvoB,KAAKiW,OAHR,WAOJL,OApCuC,SAoCjC,GACJ,OAAOI,EAAE,MAAO,CACdzF,YADc,eAEduF,MAAO9V,KAFO,iBAGd+V,GAAI/V,KAAK6Y,YACR,CACD7Y,KADC,cAEDA,KANF,mBC9CJ,MC0BM4oB,GAAiC,qBAAXzS,QAA0B,yBAAtD,OAGe,UAAAb,EAAA,MAAO,GAAP,eAGN,CACPrI,KADO,QAGP8J,WAAY,CAAEC,aAEdlE,MAAO,CACL+V,IADK,OAELC,QAFK,QAGLC,MAHK,QAILC,SAJK,OAKLC,QALK,OAML1S,QAAS,CACPvU,KADO,OAIP0T,QAAS,iBAAO,CACdwT,UADc,EAEdC,gBAFc,EAGdC,eAAWtpB,KAGf0hB,SAAU,CACRxf,KADQ,OAER0T,QAAS,iBAEX2R,MApBK,OAqBLgC,IAAK,CACHrnB,KAAM,CAAC6E,OADJ,QAEH6O,QAAS,IAEX4T,OAzBK,OA0BLrH,WAAY,CACVjgB,KAAM,CAACkT,QADG,QAEVQ,QAAS,oBAIbxS,KArCO,WAsCL,MAAO,CACLqmB,WADK,GAELC,MAFK,KAGLC,WAHK,EAILC,2BAJK,EAKLC,kBALK,EAMLC,UAAU,IAIdtW,SAAU,CACRkV,oBADQ,WAEN,OAAOnV,OAAOrT,KAAK6pB,cAAcC,QAAU9pB,KAA3C,wBAEF6pB,cAJQ,WAKN,OAAO7pB,KAAKqpB,KAAL,WAAY,eAAOrpB,KAAP,KACf,CACAqpB,IAAKrpB,KAAKqpB,IADV,IAEAC,OAAQtpB,KAAKspB,QAAUtpB,KAAKqpB,IAF5B,OAGAJ,QAASjpB,KAAKipB,SAAWjpB,KAAKqpB,IAH9B,QAIAS,OAAQzW,OAAOrT,KAAKsoB,aAAetoB,KAAKqpB,IAA1B,SACZ,CACFA,IAAKrpB,KADH,IAEFspB,OAAQtpB,KAFN,OAGFipB,QAASjpB,KAHP,QAIF8pB,OAAQzW,OAAOrT,KAAKsoB,aAAN,KAGpByB,cAlBQ,WAmBN,KAAM/pB,KAAK6pB,cAAcR,KAAOrpB,KAAK6pB,cAA/B,SAAwD7pB,KAA9D,UAA8E,MAAO,GAErF,IAAMgqB,EAAN,GACMX,EAAMrpB,KAAKypB,UAAYzpB,KAAK6pB,cAAtB,QAA8C7pB,KAA1D,WAEIA,KAAJ,UAAmBgqB,EAAA,+BAAwChqB,KAAxC,eACnB,GAASgqB,EAAA,6BAET,IAAMR,EAAQxpB,KAAKmQ,eAAe,MAAO,CACvCI,YADuC,iBAEvCsF,MAAO,CACL,0BAA2B7V,KADtB,UAEL,0BAA2BA,KAFtB,QAGL,yBAA0BA,KAAK8oB,SAEjChT,MAAO,CACLkU,gBAAiBA,EAAA,KADZ,MAELC,mBAAoBjqB,KAAKwhB,UAE3Bhf,KAAMxC,KAAKypB,YAIb,OAAKzpB,KAAL,WAEOA,KAAKmQ,eAAe,aAAc,CACvCG,MAAO,CACLrD,KAAMjN,KADD,WAELqhB,KAAM,WAEP,CALH,IAF6BmI,IAWjCvP,MAAO,CACLoP,IADK,WAGErpB,KAAL,UACKA,KAAKkqB,YADWlqB,KAAKO,UAAKT,OAAWA,GAA1C,IAGF,4BAA6B,UAG/BmS,QA9GO,WA+GLjS,KAAA,QAGFkS,QAAS,CACP3R,KADO,SACH,OAQF,IACEqoB,IAAA,GAEC5oB,KAHH,OAMA,GAAIA,KAAK6pB,cAAT,QAAgC,CAC9B,IAAMM,EAAU,IAAhB,MACAA,EAAA,IAAcnqB,KAAK6pB,cAAnB,QACA7pB,KAAA,oBAGEA,KAAK6pB,cAAT,KAA4B7pB,KAAKkqB,cAEnCE,OAvBO,WAwBLpqB,KAAA,SACAA,KAAA,aACAA,KAAA,aAAmBA,KAAnB,KAGEA,KAAKwpB,QACJxpB,KAAK6pB,cAAcR,IAAI9iB,SAAS,SAAWvG,KAAK6pB,cAAcR,IAAIgB,WAFrE,yBAIMrqB,KAAKwpB,MAAMc,eAAiBtqB,KAAKwpB,MAArC,cACExpB,KAAA,aAAoBA,KAAKwpB,MAAzB,aACAxpB,KAAA,sBAA6BA,KAAKwpB,MAAMG,aAAe3pB,KAAKwpB,MAA5D,eAEAxpB,KAAA,0BAINuqB,QAxCO,WAyCLvqB,KAAA,YACAA,KAAA,cAAoBA,KAApB,MAEFwqB,OA5CO,WA8CDxqB,KAAJ,QAAgBA,KAAKupB,WAAavpB,KAAKwpB,MAAMD,YAAcvpB,KAAKwpB,MAAhD,MAElBU,UAhDO,WAgDE,WACDV,EAAQ,IAAd,MACAxpB,KAAA,QAEAwpB,EAAA,OAAe,WAETA,EAAJ,OACEA,EAAA,gBAAsB,SAAAnhB,GACpB,OAAA4K,EAAA,MACE,qEACQ,gBADR,MAEC5K,EAAA,oCAAmCA,EAAnC,SAHQ,IAAX,MADF,KAOQ,EAPR,QASA,YAGJmhB,EAAA,QAAgBxpB,KAAhB,QAEAA,KAAA,YACAA,KAAA,QAAewpB,EAAA,MAAcxpB,KAA7B,OACAA,KAAA,uBAA8BwpB,EAAA,OAAexpB,KAAK6pB,cAAlD,QACAL,EAAA,IAAYxpB,KAAK6pB,cAAjB,IACA7pB,KAAA,kBAAwBA,KAAK6pB,cAA7B,KAEA7pB,KAAA,aAAoBA,KAAKyqB,YAAzB,GACAzqB,KAAA,UAEFyqB,YA9EO,SA8EI,GAAqD,WAA5BC,EAA4B,uDAArD,IACHC,EAAO,SAAPA,IACJ,IAAM,EAAN,EAAM,cAAiBhB,EAAvB,EAAuBA,aAEnBW,GAAJ,GACE,iBACA,wBAA6BX,EAA7B,GACUxE,EAAD,WAAiB,EAAjB,WAAoC,EAApC,UAAJ,MAAyDuF,GAC9D5O,WAAW6O,EAAX,IAIJA,KAEF5K,WA5FO,WA6FL,IAAM6K,EAAiB,mCAAvB,MAOA,OANI5qB,KAAJ,cACEA,KAAA,GAAQ4qB,EAAR,WAA8B,CAC5B9U,MAAO,CAAE/B,MAAO,GAAF,OAAK/T,KAAK2pB,aAAV,SAIlB,GAEFkB,iBAtGO,WAuGL,GAAI7qB,KAAKiW,OAAT,YAA6B,CAC3B,IAAM6U,EAAc9qB,KAAKypB,UACrB,CAACzpB,KAAKmQ,eAAe,MAAO,CAC5BI,YAAa,wBACZvQ,KAAKiW,OAHU,cAApB,GAMA,OAAKjW,KAAL,WAEOA,KAAKmQ,eAAe,aAAc,CACvC2C,MAAO,CACLiY,QADK,EAEL9d,KAAMjN,KAAKiiB,aAHf,GAF6B6I,EAAP,MAY5BlV,OA5OO,SA4OD,GACJ,IAAMoV,EAAO,4BAAb,GAEM9nB,EAAO0e,GAAUoJ,EAAD,KAAa,CACjCza,YADiC,UAEjCD,MAAO,CACL,aAActQ,KADT,IAEL4Y,KAAM5Y,KAAK6oB,IAAM,WAAQ/oB,GAE3B+V,MAAO7V,KAN0B,aASjC+W,WAAY6R,GACR,CAAC,CACD3b,KADC,YAEDmJ,UAAW,CAAE6U,MAAM,GACnBxoB,MAAO,CACL6T,QAAStW,KADJ,KAELuW,QAASvW,KAAKuW,gBAGhBzW,IAUN,OAPAkrB,EAAA,SAAgB,CACdhrB,KADc,cAEdA,KAFc,cAGdA,KAHc,mBAIdA,KAJF,cAOOgW,EAAEgV,EAAD,MAAiBA,EAAzB,aCvSE,GAAc,CAAC,KAAM,KAAM,KAAjC,MAEME,GAAY,CAAC,QAAS,MAA5B,UAEA,SAASC,GAAT,KACE,OAAO,WAAmB,cAExB,OADArY,EAAMsY,EAAS,eAAf,IAAkCC,IAClC,IAFF,IAMF,IAAMC,GAAkB,SAAAlZ,GAAD,MAAc,8CAArC,IACMmZ,GAAaJ,GAAU,SAAS,iBAAO,CAC3CnpB,KAD2C,OAE3C0T,QAF2C,KAG3C0Q,UAAWkF,OAGPE,GAAoB,SAAApZ,GAAD,MAAc,wDAAvC,IACMqZ,GAAeN,GAAU,WAAW,iBAAO,CAC/CnpB,KAD+C,OAE/C0T,QAF+C,KAG/C0Q,UAAWoF,OAGPE,GAAyB,SAAAtZ,GAAD,MAAc,kEAA5C,IACMuZ,GAAoBR,GAAU,gBAAgB,iBAAO,CACzDnpB,KADyD,OAEzD0T,QAFyD,KAGzD0Q,UAAWsF,OAGP,GAAU,CACdE,MAAOrkB,OAAA,KADO,IAEdskB,QAAStkB,OAAA,KAFK,IAGdukB,aAAcvkB,OAAA,UAGVwkB,GAAW,CACfH,MADe,QAEfC,QAFe,UAGfC,aAAc,iBAGhB,SAAS,GAAT,OACE,IAAI/F,EAAYgG,GAAhB,GACA,SAAItZ,EAAJ,CAGA,KAAU,CAER,IAAMuT,EAAanM,EAAA,UAAnB,IACAkM,GAAa,IAAJ,OAAT,GAIF,OADAA,GAAa,IAAJ,OAAT,GACOA,EAAP,eAGF,IAAM,GAAQ,IAAd,IAEe,iBAAW,CACxB9Y,KADwB,QAExBgU,YAFwB,EAGxBnO,MAAO,8CACL2C,IAAK,CACHzT,KADG,OAEH0T,QAAS,OAEXsR,MALK,QAMLgF,UANK,QAOLJ,MAAO,CACL5pB,KADK,OAEL0T,QAFK,KAGL0Q,UAAWkF,KAVR,IAAF,IAaHO,QAAS,CACP7pB,KADO,OAEP0T,QAFO,KAGP0Q,UAAWoF,KAhBR,IAAF,IAmBHM,aAAc,CACZ9pB,KADY,OAEZ0T,QAFY,KAGZ0Q,UAAWsF,KAEVC,IAEL/V,OA7BwB,SA6BlB,EA7BkB,GA6BY,IAAzB,EAAyB,EAAzB,QAAyB,EAAzB,KAAe2C,EAAU,EAAVA,SAEpB8N,EAAJ,GACA,IAAK,IAAL,OACEA,GAAYxf,OAAQiM,EAApB,IAEF,IAAIwT,EAAY,OAAhB,GAyBA,OAvBA,GAAgB,iBAGd,EACA,SAHAA,EADc,GAId,GACE,eAAsB,SAAAzM,GACpB,IAAMpX,EAAiBqQ,EAAvB,GACMiT,EAAY,GAAgB/jB,EAAM6X,EAAxC,GACA,GAAeyM,EAAA,WAInBA,EAAA,SACE,aAAcxT,EADD,UAEb,aAAcA,EAFD,OAAf,iCAGYA,EAAV,OAA0BA,EAHb,OAAf,mCAIcA,EAAZ,SAA8BA,EAJjB,SAAf,yCAKoBA,EAAlB,cAAyCA,EAAMgZ,cALjD,IAQA,YApBc,GAuBT9V,EACLlD,EADM,IAEN8O,GAAU1e,EAAM,CACdqN,YADc,MAEdsF,MAAOyQ,IAJX,MCtHW,I,UAAA,OAAAhR,EAAA,MACb,QADa,OAGN,CACPrI,KADO,cAGP6F,MAAO,CACLmZ,MAAO/W,SAGTU,OAPO,SAOD,GACJ,OAAOI,EAAE,MAAO,CACdzF,YADc,cAEdsF,MAAO,gBACL,qBAAsB7V,KADjB,OAEFA,KAAKqkB,cAEV/T,MAAOtQ,KANO,OAOd+V,GAAI/V,KAAK6Y,YACR7Y,KAAKiW,OARR,aCbAmS,GAAY,eACd,EACA,EACA/W,GACA,EACA,KACA,WACA,MAIa,aAAA+W,GAAiB,QAehC,IAAkBA,GAAW,CAAC8D,KAAA,GAAKC,MAAA,GAAM9G,gBAAaC,aAAU8G,QAAKC,cAAWC,MAAA,GAAMC,KAAA,GAAKC,gBAAA,GAAgBC,QAAKC,WAAA,M,kCCjChH,IAAIxtB,EAAI,EAAQ,QACZgQ,EAAa,EAAQ,QACrBC,EAAyB,EAAQ,QAIrCjQ,EAAE,CAAEM,OAAQ,SAAUC,OAAO,EAAMuG,OAAQmJ,EAAuB,UAAY,CAC5EmL,MAAO,WACL,OAAOpL,EAAWlP,KAAM,KAAM,GAAI,Q,kCCRtC,IAAId,EAAI,EAAQ,QACZgQ,EAAa,EAAQ,QACrBC,EAAyB,EAAQ,QAIrCjQ,EAAE,CAAEM,OAAQ,SAAUC,OAAO,EAAMuG,OAAQmJ,EAAuB,UAAY,CAC5EqP,MAAO,WACL,OAAOtP,EAAWlP,KAAM,QAAS,GAAI,Q","file":"js/about.c7b7de46.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","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=7ed77054&scoped=true&lang=css&\"","'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.REQUIRED = true;\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 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 = String(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 = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","/**\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 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 = Gp.constructor = GeneratorFunctionPrototype;\n 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 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 Gp[iteratorSymbol] = function() {\n return this;\n };\n\n 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, 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 Function(\"r\", \"regeneratorRuntime = r\")(runtime);\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\":\"teal\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.decompDone,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" \"+_vm._s(_vm.jak1BlackLabelStatus.decompLabel)+\" - \"+_vm._s(_vm.jak1BlackLabelStatus.decompDone)+\"% \")])],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=7ed77054&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=7ed77054&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 \"7ed77054\",\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.5b8d0e0d.js b/docs/js/app.1e67702b.js similarity index 97% rename from docs/js/app.5b8d0e0d.js rename to docs/js/app.1e67702b.js index 8e291f0f41..c106beb0ca 100644 --- a/docs/js/app.5b8d0e0d.js +++ b/docs/js/app.1e67702b.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?3aed","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.1e67702b.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\":\"93743c22\"}[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\":\"8d0e9591\"}[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/docs/js/chunk-vendors.492c07dc.js.map b/docs/js/chunk-vendors.492c07dc.js.map deleted file mode 100644 index 9808bf37be..0000000000 --- a/docs/js/chunk-vendors.492c07dc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/engine-ff-version.js","webpack:///./node_modules/core-js/internals/function-bind.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.object.values.js","webpack:///./node_modules/core-js/internals/get-substitution.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/regexp-unsupported-ncg.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/modules/es.string.split.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/core-js/modules/es.string.anchor.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///./node_modules/core-js/internals/engine-is-ios.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/internals/iterate.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack:///./node_modules/core-js/internals/iterator-close.js","webpack:///./node_modules/vue/dist/vue.runtime.esm.js","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./node_modules/core-js/internals/task.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/modules/es.math.cbrt.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/host-report-errors.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/core-js/modules/es.string.match.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/core-js/modules/es.reflect.construct.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/engine-webkit-version.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///../../src/util/mixins.ts","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/engine-is-node.js","webpack:///./node_modules/core-js/internals/engine-is-browser.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/vuetify-loader/lib/runtime/installComponents.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/object-to-array.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///../../../src/components/VApp/VApp.ts","webpack:///../../../src/mixins/themeable/index.ts","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///../../src/util/colorUtils.ts","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///../../src/util/helpers.ts","webpack:///./node_modules/core-js/internals/array-fill.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/create-html.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/vue-router/dist/vue-router.esm.js","webpack:///../../../src/util/color/transformSRGB.ts","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./node_modules/core-js/modules/es.array.from.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/internals/array-sort.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/string-html-forced.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/modules/es.function.name.js","webpack:///./node_modules/core-js/internals/microtask.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/core-js/internals/freezing.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack:///../../src/util/console.ts","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es.object.freeze.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/internals/perform.js","webpack:///./node_modules/core-js/modules/es.promise.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///./node_modules/core-js/internals/internal-metadata.js","webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///../src/install.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack:///../../src/locale/en.ts","webpack:///../../../src/presets/default/index.ts","webpack:///../../../src/services/service/index.ts","webpack:///../../../src/services/presets/index.ts","webpack:///../../../src/services/application/index.ts","webpack:///../../../src/services/breakpoint/index.ts","webpack:///../../../src/services/goto/easing-patterns.ts","webpack:///../../../src/services/goto/util.ts","webpack:///../../../src/services/goto/index.ts","webpack:///../../../../src/services/icons/presets/mdi-svg.ts","webpack:///../../../../src/services/icons/presets/md.ts","webpack:///../../../../src/services/icons/presets/mdi.ts","webpack:///../../../../src/services/icons/presets/fa.ts","webpack:///../../../../src/services/icons/presets/fa4.ts","webpack:///../../../../src/services/icons/presets/fa-svg.ts","webpack:///../../../../src/services/icons/presets/index.ts","webpack:///../../../src/services/icons/index.ts","webpack:///../../../src/services/lang/index.ts","webpack:///../../../src/util/color/transformCIELAB.ts","webpack:///../../../src/services/theme/utils.ts","webpack:///../../../src/services/theme/index.ts","webpack:///../src/framework.ts","webpack:///./node_modules/core-js/internals/classof.js","webpack:///../../../src/mixins/ssr-bootable/index.ts","webpack:///../../../src/components/VMain/VMain.ts","webpack:///./node_modules/core-js/internals/math-sign.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/regexp-unsupported-dot-all.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/native-promise-constructor.js"],"names":["wellKnownSymbol","TO_STRING_TAG","test","module","exports","String","aFunction","fn","that","length","undefined","call","a","b","c","apply","arguments","userAgent","firefox","match","isObject","slice","factories","construct","C","argsLength","args","list","i","Function","join","bind","this","partArgs","boundFunction","concat","prototype","toIndexedObject","$getOwnPropertyNames","f","toString","windowNames","window","Object","getOwnPropertyNames","getWindowNames","it","error","_arrayLikeToArray","arr","len","arr2","Array","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","constructor","name","from","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toPrimitive","has","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","getOwnPropertyDescriptor","O","P","$","$values","values","target","stat","toObject","floor","Math","replace","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","str","position","captures","namedCaptures","replacement","tailPos","m","symbols","ch","capture","charAt","fails","createElement","defineProperty","get","re","RegExp","exec","groups","toInteger","requireObjectCoercible","count","result","Infinity","RangeError","fixRegExpWellKnownSymbolLogic","isRegExp","anObject","speciesConstructor","advanceStringIndex","toLength","callRegExpExec","regexpExec","stickyHelpers","UNSUPPORTED_Y","arrayPush","push","min","MAX_UINT32","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","split","SPLIT","nativeSplit","maybeCallNative","internalSplit","separator","limit","string","lim","lastIndex","lastLength","output","flags","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","source","index","splitter","res","done","value","rx","S","unicodeMatching","p","q","A","e","z","classof","R","TypeError","global","DOMIterables","forEach","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","$forEach","arrayMethodIsStrict","STRICT_METHOD","callbackfn","createHTML","forcedStringHTMLMethod","proto","forced","anchor","Constructor","getBuiltIn","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","next","SKIP_CLOSING","ITERATION_SUPPORT","object","V8_VERSION","SPECIES","METHOD_NAME","array","foo","Boolean","isArrayIteratorMethod","getIteratorMethod","iteratorClose","Result","stopped","iterable","unboundFunction","options","iterator","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","max","integer","redefine","setGlobal","copyConstructorProperties","isForced","FORCED","key","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","noTargetGet","sham","internalObjectKeys","enumBugKeys","hiddenKeys","notARegExp","correctIsRegExpLogic","includes","searchString","indexOf","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","unsafe","definePropertyModule","CONSTRUCTOR_NAME","configurable","normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","returnMethod","emptyObject","freeze","isUndef","v","isDef","isTrue","isFalse","isPrimitive","obj","_toString","isPlainObject","isValidArrayIndex","val","parseFloat","isFinite","isPromise","then","catch","isArray","JSON","stringify","toNumber","isNaN","makeMap","expectsLowerCase","map","create","toLowerCase","isReservedAttribute","remove","item","splice","hasOwnProperty","hasOwn","cached","cache","hit","camelizeRE","camelize","_","toUpperCase","capitalize","hyphenateRE","hyphenate","polyfillBind","ctx","boundFn","l","_length","nativeBind","toArray","start","ret","extend","to","_from","noop","no","identity","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","every","Date","getTime","keysA","keys","keysB","looseIndexOf","once","SSR_ATTR","ASSET_TYPES","LIFECYCLE_HOOKS","config","optionMergeStrategies","silent","productionTip","devtools","performance","errorHandler","warnHandler","ignoredElements","keyCodes","isReservedTag","isReservedAttr","isUnknownElement","getTagNamespace","parsePlatformTagName","mustUseProp","async","_lifecycleHooks","unicodeRegExp","isReserved","charCodeAt","def","enumerable","writable","bailRE","parsePath","path","segments","_isServer","hasProto","inBrowser","inWeex","WXEnvironment","platform","weexPlatform","UA","navigator","isIE","isIE9","isEdge","isIOS","isFF","nativeWatch","watch","supportsPassive","opts","addEventListener","isServerRendering","env","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","isNative","Ctor","_Set","hasSymbol","Symbol","Reflect","ownKeys","Set","set","clear","warn","uid","Dep","id","subs","addSub","sub","removeSub","depend","addDep","notify","update","targetStack","pushTarget","popTarget","pop","VNode","tag","data","children","text","elm","componentOptions","asyncFactory","ns","fnContext","fnOptions","fnScopeId","componentInstance","raw","isStatic","isRootInsert","isComment","isCloned","isOnce","asyncMeta","isAsyncPlaceholder","prototypeAccessors","child","defineProperties","createEmptyVNode","node","createTextVNode","cloneVNode","vnode","cloned","arrayProto","arrayMethods","methodsToPatch","method","original","inserted","ob","__ob__","observeArray","dep","arrayKeys","shouldObserve","toggleObserving","Observer","vmCount","protoAugment","copyAugment","walk","src","__proto__","observe","asRootData","isExtensible","_isVue","defineReactive$$1","customSetter","shallow","property","getter","setter","childOb","dependArray","newVal","del","items","strats","mergeData","toVal","fromVal","mergeDataOrFn","parentVal","childVal","vm","instanceData","defaultData","mergeHook","dedupeHooks","hooks","mergeAssets","type","key$1","props","methods","inject","computed","provide","defaultStrat","normalizeProps","normalizeInject","normalized","normalizeDirectives","dirs","directives","def$$1","mergeOptions","_base","extends","mixins","mergeField","strat","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","validateProp","propOptions","propsData","prop","absent","booleanIndex","getTypeIndex","stringIndex","getPropDefaultValue","prevShouldObserve","default","_props","getType","functionTypeCheckRE","isSameType","expectedTypes","handleError","err","info","cur","$parent","errorCaptured","globalHandleError","invokeWithErrorHandling","handler","_handled","logError","console","timerFunc","isUsingMicroTask","callbacks","pending","flushCallbacks","copies","Promise","resolve","setTimeout","MutationObserver","setImmediate","counter","observer","textNode","document","createTextNode","characterData","nextTick","cb","_resolve","seenObjects","traverse","_traverse","seen","isA","isFrozen","depId","normalizeEvent","passive","once$$1","createFnInvoker","fns","invoker","arguments$1","updateListeners","on","oldOn","remove$$1","createOnceHandler","old","event","params","mergeVNodeHook","hookKey","oldHook","wrappedHook","merged","extractPropsFromVNodeData","attrs","altKey","checkProp","hash","preserve","simpleNormalizeChildren","normalizeChildren","normalizeArrayChildren","isTextNode","nestedIndex","last","shift","_isVList","initProvide","_provided","initInjections","resolveInject","provideKey","provideDefault","resolveSlots","slots","slot","name$1","isWhitespace","normalizeScopedSlots","normalSlots","prevSlots","hasNormalSlots","isStable","$stable","$key","_normalized","$hasNormal","normalizeScopedSlot","key$2","proxyNormalSlot","proxy","renderList","renderSlot","fallbackRender","bindObject","nodes","scopedSlotFn","$scopedSlots","$slots","$createElement","resolveFilter","isKeyNotMatch","expect","actual","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","bindObjectProps","asProp","isSync","loop","domProps","camelizedKey","hyphenatedKey","$event","renderStatic","isInFor","_staticTrees","tree","_renderProxy","markStatic","markOnce","markStaticNode","bindObjectListeners","ours","resolveScopedSlots","hasDynamicKeys","contentHashKey","bindDynamicKeys","baseObj","prependModifier","symbol","installRenderHelpers","_o","_n","_s","_l","_t","_q","_i","_m","_f","_k","_b","_v","_e","_u","_g","_d","_p","FunctionalRenderContext","contextVm","this$1","_original","isCompiled","needNormalization","listeners","injections","scopedSlots","_c","d","createFunctionalComponent","mergeProps","renderContext","cloneAndMarkFunctionalResult","vnodes","clone","componentVNodeHooks","init","hydrating","_isDestroyed","keepAlive","mountedNode","prepatch","createComponentInstanceForVnode","activeInstance","$mount","oldVnode","updateChildComponent","insert","_isMounted","callHook","queueActivatedComponent","activateChildComponent","destroy","deactivateChildComponent","$destroy","hooksToMerge","createComponent","baseCtor","cid","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","model","transformModel","nativeOn","abstract","installComponentHooks","_isComponent","_parentVnode","inlineTemplate","toMerge","_merged","mergeHook$1","f1","f2","callback","SIMPLE_NORMALIZE","ALWAYS_NORMALIZE","normalizationType","alwaysNormalize","_createElement","is","pre","applyNS","registerDeepBindings","force","style","class","initRender","_vnode","parentVnode","_renderChildren","parentData","_parentListeners","currentRenderingInstance","renderMixin","Vue","$nextTick","_render","ref","ensureCtor","comp","base","__esModule","toStringTag","factory","errorComp","resolved","owner","owners","loading","loadingComp","sync","timerLoading","timerTimeout","$on","forceRender","renderCompleted","$forceUpdate","clearTimeout","reject","reason","component","delay","timeout","getFirstComponentChild","initEvents","_events","_hasHookEvent","updateComponentListeners","remove$1","$off","_target","onceHandler","oldListeners","eventsMixin","hookRE","$once","i$1","cbs","$emit","setActiveInstance","prevActiveInstance","initLifecycle","$children","$refs","_watcher","_inactive","_directInactive","_isBeingDestroyed","lifecycleMixin","_update","prevEl","$el","prevVnode","restoreActiveInstance","__patch__","__vue__","teardown","_watchers","_data","mountComponent","el","updateComponent","Watcher","before","renderChildren","newScopedSlots","oldScopedSlots","hasDynamicScopedSlot","needsForceUpdate","$attrs","$listeners","propKeys","_propKeys","isInInactiveTree","direct","handlers","j","queue","activatedChildren","waiting","flushing","resetSchedulerState","currentFlushTimestamp","getNow","now","createEvent","timeStamp","flushSchedulerQueue","watcher","sort","run","activatedQueue","updatedQueue","callActivatedHooks","callUpdatedHooks","emit","queueWatcher","uid$2","expOrFn","isRenderWatcher","deep","user","lazy","active","dirty","deps","newDeps","depIds","newDepIds","expression","cleanupDeps","tmp","oldValue","evaluate","sharedPropertyDefinition","sourceKey","initState","initProps","initMethods","initData","initComputed","initWatch","propsOptions","isRoot","getData","computedWatcherOptions","watchers","_computedWatchers","isSSR","userDef","defineComputed","shouldCache","createComputedGetter","createGetterInvoker","createWatcher","$watch","stateMixin","dataDef","propsDef","$set","$delete","immediate","uid$3","initMixin","_init","_uid","initInternalComponent","_self","vnodeComponentOptions","_componentTag","super","superOptions","cachedSuperOptions","modifiedOptions","resolveModifiedOptions","extendOptions","components","modified","latest","sealed","sealedOptions","initUse","use","plugin","installedPlugins","_installedPlugins","unshift","install","initMixin$1","mixin","initExtend","Super","SuperId","cachedCtors","_Ctor","Sub","initProps$1","initComputed$1","Comp","initAssetRegisters","definition","getComponentName","matches","pattern","pruneCache","keepAliveInstance","filter","entry","pruneCacheEntry","current","patternTypes","KeepAlive","include","exclude","Number","cacheVNode","vnodeToCache","keyToCache","parseInt","created","destroyed","mounted","updated","ref$1","builtInComponents","initGlobalAPI","configDef","util","defineReactive","delete","observable","version","acceptValue","attr","isEnumeratedAttr","isValidContentEditableValue","convertEnumeratedValue","isFalsyAttrValue","isBooleanAttr","xlinkNS","isXlink","getXlinkProp","genClassForVnode","parentNode","childNode","mergeClassData","renderClass","staticClass","dynamicClass","stringifyClass","stringifyArray","stringifyObject","stringified","namespaceMap","svg","math","isHTMLTag","isSVG","unknownElementCache","HTMLUnknownElement","HTMLElement","isTextInputType","query","selected","querySelector","createElement$1","tagName","multiple","setAttribute","createElementNS","namespace","createComment","insertBefore","newNode","referenceNode","removeChild","appendChild","nextSibling","setTextContent","textContent","setStyleScope","nodeOps","registerRef","isRemoval","refs","refInFor","emptyNode","sameVnode","sameInputType","typeA","typeB","createKeyToOldIdx","beginIdx","endIdx","createPatchFunction","backend","modules","emptyNodeAt","createRmCb","childElm","removeNode","createElm","insertedVnodeQueue","parentElm","refElm","nested","ownerArray","setScope","createChildren","invokeCreateHooks","isReactivated","initComponent","reactivateComponent","pendingInsert","isPatchable","innerNode","transition","activate","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","removeAndInvokeRemoveHook","rm","updateChildren","oldCh","newCh","removeOnly","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","patchVnode","findIdxInOld","end","hydrate","postpatch","invokeInsertHook","initial","isRenderedModule","inVPre","hasChildNodes","innerHTML","childrenMatch","firstChild","fullInvoke","isInitialPatch","isRealElement","nodeType","hasAttribute","removeAttribute","oldElm","_leaveCb","patchable","i$2","updateDirectives","oldDir","dir","isCreate","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","oldArg","arg","callHook$1","componentUpdated","callInsert","emptyModifiers","modifiers","getRawDirName","rawName","baseModules","updateAttrs","inheritAttrs","oldAttrs","setAttr","removeAttributeNS","isInPre","baseSetAttr","setAttributeNS","__ieph","blocker","stopImmediatePropagation","removeEventListener","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","target$1","klass","RANGE_TOKEN","CHECKBOX_RADIO_TOKEN","normalizeEvents","change","createOnceHandler$1","remove$2","useMicrotaskFix","add$1","attachedTimestamp","_wrapper","currentTarget","ownerDocument","updateDOMListeners","svgContainer","events","updateDOMProps","oldProps","childNodes","_value","strCur","shouldUpdateValue","checkVal","composing","isNotInFocusAndDirty","isDirtyWithModifiers","notInFocus","activeElement","_vModifiers","number","trim","parseStyleText","cssText","listDelimiter","propertyDelimiter","normalizeStyleData","normalizeStyleBinding","staticStyle","bindingStyle","getStyle","checkChild","styleData","emptyStyle","cssVarRE","importantRE","setProp","setProperty","normalizedName","normalize","vendorNames","capName","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","whitespaceRE","addClass","classList","getAttribute","removeClass","tar","resolveTransition","css","autoCssTransition","enterClass","enterToClass","enterActiveClass","leaveClass","leaveToClass","leaveActiveClass","hasTransition","TRANSITION","ANIMATION","transitionProp","transitionEndEvent","animationProp","animationEndEvent","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","raf","requestAnimationFrame","nextFrame","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","ended","onEnd","transformRE","styles","getComputedStyle","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","durations","toMs","s","enter","toggleDisplay","cancelled","_enterCb","appearClass","appearToClass","appearActiveClass","beforeEnter","afterEnter","enterCancelled","beforeAppear","appear","afterAppear","appearCancelled","duration","transitionNode","isAppear","startClass","activeClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","show","pendingNode","_pending","isValidDuration","leave","beforeLeave","afterLeave","leaveCancelled","delayLeave","explicitLeaveDuration","performLeave","invokerFns","_enter","platformModules","patch","vmodel","trigger","directive","binding","_vOptions","setSelected","getValue","onCompositionStart","onCompositionEnd","prevOptions","curOptions","some","needReset","hasNoMatchingOption","actuallySetSelected","isMultiple","option","selectedIndex","initEvent","dispatchEvent","locateNode","transition$$1","originalDisplay","__vOriginalDisplay","display","unbind","platformDirectives","transitionProps","mode","getRealChild","compOptions","extractTransitionData","placeholder","rawChild","hasParentTransition","isSameChild","oldChild","isNotTextNode","isVShowDirective","Transition","_leaving","oldRawChild","delayedLeave","moveClass","TransitionGroup","beforeMount","kept","prevChildren","rawChildren","transitionData","removed","c$1","pos","getBoundingClientRect","hasMove","callPendingCbs","recordPosition","applyTranslation","_reflow","body","offsetHeight","moved","transform","WebkitTransform","transitionDuration","_moveCb","propertyName","_hasMove","cloneNode","newPos","oldPos","dx","left","dy","top","platformComponents","IS_PURE","$startsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","search","defer","channel","port","html","IS_IOS","IS_NODE","location","clearImmediate","process","MessageChannel","Dispatch","ONREADYSTATECHANGE","runner","listener","post","postMessage","protocol","host","port2","port1","onmessage","importScripts","versions","v8","nativeGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","FAILS_ON_PRIMITIVES","getPrototypeOf","Iterators","objectKeys","Properties","_arrayWithHoles","_iterableToArrayLimit","_arr","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","repeat","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","getterFor","iterated","point","state","sign","abs","pow","cbrt","x","propertyIsEnumerable","UNSCOPABLES","ArrayPrototype","MATCH","regExpExec","nativeMatch","regexp","matcher","fullUnicode","matchStr","defaultConstructor","getOwnPropertySymbols","$trim","forcedStringTrimMethod","nativeConstruct","NEW_TARGET_BUG","F","ARGS_BUG","Target","newTarget","$args","instance","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","callWithSafeIterationClosing","createProperty","arrayLike","argumentsLength","mapfn","mapping","iteratorMethod","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","code","chr","fromCharCode","k","getSortCompare","comparefn","y","itemsLength","arrayLength","argument","webkit","getSubstitution","REPLACE","maybeToString","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_SUPPORTS_NAMED_GROUPS","nativeReplace","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","_typeof","enumerableOnly","sym","_objectSpread2","getOwnPropertyDescriptors","store","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","whitespaces","whitespace","ltrim","rtrim","TYPE","bitmap","IndexedObject","$assign","assign","B","alphabet","T","CONVERT_TO_STRING","first","second","size","codeAt","originalArray","NATIVE_WEAK_MAP","objectHas","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","enforce","wmget","wmhas","wmset","metadata","facade","STATE","inspectSource","enforceInternalState","TEMPLATE","simple","TO_ENTRIES","entries","setPrototypeOf","dummy","Wrapper","NewTarget","NewTargetPrototype","wrappedWellKnownSymbolModule","NAME","dark","light","isDark","$vuetify","theme","Error","wrapper","themeClasses","Themeable","themeableProvide","appIsDark","rootIsDark","rootThemeClasses","color","rgb","char","hexColor","intToHex","colorToInt","activeXDocument","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObjectViaIFrame","iframeDocument","iframe","JS","contentWindow","open","NullProtoObject","domain","ActiveXObject","$find","find","addToUnscopables","FIND","SKIPS_HOLES","createIteratorConstructor","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","testListenerOpts","fallback","getNestedValue","filtered","unit","tab","esc","space","up","down","right","home","backspace","pageup","pagedown","iconName","iconPath","override","getObjectValueByPath","icon","optional","chunked","mergeDeep","endPos","propertyKey","quot","attribute","p1","functionToString","message","encodeReserveRE","encodeReserveReplacer","commaRE","encode","encodeURIComponent","decode","decodeURIComponent","resolveQuery","extraQuery","_parseQuery","parsedQuery","parse","parseQuery","castQueryParamValue","param","parts","stringifyQuery","val2","trailingSlashRE","createRoute","record","redirectedFrom","router","route","meta","fullPath","getFullPath","formatMatch","START","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","bKeys","aVal","bKey","bVal","isIncludedRoute","queryIncludes","handleRouteEntered","instances","enteredCbs","View","routerView","$route","_routerViewCache","depth","inactive","_routerRoot","vnodeData","routerViewDepth","cachedData","cachedComponent","configProps","fillPropsinData","registerRouteInstance","propsToPass","resolveProps","resolvePath","relative","append","firstChar","stack","segment","hashIndex","queryIndex","cleanPath","isarray","pathToRegexp_1","pathToRegexp","parse_1","compile_1","compile","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","delimiter","escaped","offset","prefix","group","modifier","asterisk","partial","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","encodeAsterisk","pretty","token","attachKeys","sensitive","regexpToRegexp","arrayToRegexp","stringToRegexp","strict","endsWithDelimiter","regexpCompileCache","fillParams","routeMsg","filler","pathMatch","normalizeLocation","params$1","rawPath","parsedPath","basePath","_Vue","toTypes","eventTypes","Link","required","custom","exact","exactPath","exactActiveClass","ariaCurrentValue","$router","href","classes","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","guardEvent","click","scopedSlot","navigate","isActive","isExactActive","findAnchor","aData","handler$1","event$1","aAttrs","metaKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","installed","registerInstance","callVal","_router","history","_route","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","redirect","childMatchAs","aliases","aliasRoute","createMatcher","addRoutes","addRoute","parentOrRoute","getRoutes","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","resolveRecordPath","resolvedPath","aliasedPath","aliasedMatch","aliasedRecord","Time","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","scrollRestoration","protocolAndPath","absolutePath","stateCopy","replaceState","handlePopState","handleScroll","isPop","app","behavior","scrollBehavior","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","pageYOffset","getElementPosition","docEl","documentElement","docRect","elRect","isValidPosition","isNumber","normalizePosition","normalizeOffset","hashStartsWithNumberRE","selector","getElementById","scrollTo","supportsPushState","ua","pushState","url","runQueue","NavigationFailureType","redirected","aborted","duplicated","createNavigationRedirectedError","createRouterError","stringifyRoute","createNavigationDuplicatedError","createNavigationCancelledError","createNavigationAbortedError","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","resolveAsyncComponents","hasAsync","flatMapComponents","resolvedDef","isESModule","msg","flatten","History","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","baseEl","resolveQueue","activated","deactivated","extractGuards","records","reverse","guards","guard","extractGuard","extractLeaveGuards","bindGuard","extractUpdateHooks","extractEnterGuards","bindEnterGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","beforeHooks","enterGuards","resolveHooks","setupListeners","cleanupListener","HTML5History","_startLocation","getLocation","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","pathname","pathLowerCase","baseLowerCase","HashHistory","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","apps","registerHook","createHref","handleInitialScroll","routeOrError","beforeEach","beforeResolve","afterEach","back","forward","getMatchedComponents","normalizedTo","START_LOCATION","srgbForwardMatrix","srgbForwardTransform","srgbReverseMatrix","srgbReverseTransform","matrix","xyz","r","g","postfix","random","regexpFlags","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","BROKEN_CARET","NPCG_INCLUDED","PATCH","reCopy","charsAdded","strCopy","input","feature","detection","POLYFILL","NATIVE","arraySpeciesCreate","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","$defineProperty","Attributes","RE","nativeJoin","ES3_STRINGS","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","nativeObjectCreate","getOwnPropertyNamesExternal","getOwnPropertyDescriptorModule","defineWellKnownSymbol","HIDDEN","SYMBOL","TO_PRIMITIVE","ObjectPrototype","$Symbol","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","description","isSymbol","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","V","names","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","FORCED_JSON_STRINGIFY","$replacer","valueOf","checkCorrectnessOfIteration","INCORRECT_ITERATION","ceil","NativePromise","promiseResolve","NON_GENERIC","real","onFinally","isFunction","inheritIfRequired","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","third","radix","maxCode","digits","NaN","NumberWrapper","error1","error2","dotAll","mergeSort","middle","insertionSort","merge","element","llength","rlength","lindex","rindex","_defineProperty","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","TO_STRING_TAG_SUPPORT","FunctionPrototype","FunctionPrototypeToString","nameRE","flush","head","toggle","promise","macrotask","IS_WEBOS_WEBKIT","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","exit","task","createWellKnownSymbol","withoutSetter","nativeKeys","thisNumberValue","nativeToFixed","acc","log","x2","multiply","c2","divide","dataToString","t","fractionDigits","fractDigits","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","specificCreate","self","findIndex","filterOut","preventExtensions","PREFERRED_STRING","SHARED","non","$includes","fill","EXISTS","newPromiseCapability","promiseCapability","variable","NASHORN_BUG","1","aPossiblePrototype","CORRECT_SETTER","TAG","SHAM","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","$exec","$map","createMessage","generateComponentTrace","newMessage","consoleError","classifyRE","classify","formatComponentName","file","includeFile","currentRecursiveSequence","check","globalThis","FREEZING","onFreeze","$freeze","ArrayIteratorMethods","ArrayValues","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","ARRAY_ITERATOR","kind","Arguments","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","redefineAll","setSpecies","anInstance","iterate","microtask","hostReportErrors","newPromiseCapabilityModule","perform","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","REJECTED","HANDLED","UNHANDLED","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","fail","rejection","onHandleUnhandled","onUnhandled","IS_UNHANDLED","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","capability","$promiseResolve","remaining","alreadyCalled","race","PromiseCapability","$$resolve","$$reject","METADATA","setMetadata","objectID","weakData","fastKey","getWeakData","REQUIRED","_classCallCheck","_defineProperties","_createClass","protoProps","staticProps","registerComponents","vuetify","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","objectWithoutPropertiesLoose","sourceSymbolKeys","_setPrototypeOf","_inherits","subClass","superClass","_getPrototypeOf","_isNativeReflectConstruct","Proxy","_assertThisInitialized","ReferenceError","_possibleConstructorReturn","assertThisInitialized","_createSuper","Derived","hasNativeReflectConstruct","isNativeReflectConstruct","possibleConstructorReturn","badge","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","nextPage","prevPage","firstPage","lastPage","pageText","datePicker","itemsSelected","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","calendar","moreEvents","fileInput","counterSize","timePicker","am","pm","pagination","previous","page","currentPage","rating","breakpoint","mobileBreakpoint","scrollBarWidth","thresholds","xs","sm","md","lg","icons","iconfont","lang","locales","en","rtl","disable","cspNonce","customProperties","minifyTheme","themeCache","variations","themes","primary","secondary","accent","success","warning","framework","defaultPreset","userPreset","preset","globalPreset","bar","insetFooter","bottom","footer","application","xl","xsOnly","smOnly","smAndDown","smAndUp","mdOnly","mdAndDown","mdAndUp","lgOnly","lgAndDown","lgAndUp","xlOnly","height","width","mobile","resizeTimeout","Breakpoint","onResize","ssr","breakpoints","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","totalOffset","container","_settings","settings","easing","appOffset","getContainer","goTo","isDrawer","isClipped","startTime","targetLocation","getOffset","startLocation","ease","timeElapsed","currentTime","progress","clientHeight","complete","cancel","checkboxOn","checkboxOff","checkboxIndeterminate","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","unfold","plus","minus","iconSet","convertToComponentDeclarations","mdiSvg","mdi","fa","fa4","faSvg","Icons","presets","LANG_PREFIX","getTranslation","usingDefault","shortKey","translation","locale","defaultLocale","Lang","translator","currentLocale","delta","cielabForwardTransform","cielabReverseTransform","transformedY","Ln","lab","isItem","variant","colors","parsedTheme","genVariations","genBaseColor","genColorVariableName","genColorVariable","cssVar","variablesCss","aColor","variants","variantValue","lighten","darken","amount","disabled","unwatch","vueMeta","Theme","styleEl","oldDark","root","defaults","defaultTheme","metaKeyName","getOptions","metaInfo","vuetifyStylesheet","nonce","addApp","obs","currentTheme","isHydrating","service","Service","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","isBooted","paddingTop","paddingRight","paddingBottom","paddingLeft","nativeSlice","fin","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList"],"mappings":"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","file":"js/chunk-vendors.492c07dc.js","sourcesContent":["var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var fails = require('./fails');\n\nmodule.exports = fails(function () {\n // babel-minify transpiles RegExp('.', 'g') -> /./g and it causes SyntaxError\n var re = RegExp('(?b)', (typeof '').charAt(5));\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var res = maybeCallNative(internalSplit, this, string, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(this);\n var S = String(string);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i], vm);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n var haveExpectedTypes = expectedTypes.some(function (t) { return t; });\n if (!valid && haveExpectedTypes) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\n\nfunction assertType (value, type, vm) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n try {\n valid = value instanceof type;\n } catch (e) {\n warn('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\n valid = false;\n }\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(functionTypeCheckRE);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n // check if we need to specify expected value\n if (\n expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n isExplicable(typeof value) &&\n !isBoolean(expectedType, receivedType)\n ) {\n message += \" with value \" + (styleValue(value, expectedType));\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + (styleValue(value, receivedType)) + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nvar EXPLICABLE_TYPES = ['string', 'number', 'boolean'];\nfunction isExplicable (value) {\n return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.