From d0c7584ed52715cf52d3112d8b4bd08a39e2e72d Mon Sep 17 00:00:00 2001 From: Kiro Agent <244629292+kiro-agent@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:07:55 +0000 Subject: [PATCH] Comprehensive project modernization - Initialize Go modules (go.mod) with Go 1.25.1 - Upgrade tcell from v1.4.1 to v2.7.4 (updated import paths) - Upgrade gorilla/websocket to v1.5.3 - Replace deprecated io/ioutil with io package - Fix CIA vet errors (non-constant format strings in log.Printf) - Fix UnsetKey bit-clear logic (was &= 0< --- .gitignore | 4 +- CIA/cia.go | 10 +- CIA/cia_test.go | 223 +- CIA/keyboard.go | 2 +- MOS6510/cpu_instructions_test.go | 2590 +- MOS6510/cpu_stack_test.go | 87 +- MOS6510/cpu_status_test.go | 65 +- RAM/memory.go | 4 +- RAM/memory_test.go | 342 + README.md | 310 +- VIC2/c64_char_converter_test.go | 170 + VIC2/c64_color_converter.go | 2 +- VIC2/c64_color_converter_test.go | 179 + VIC2/memory_display.go | 2 +- docs/ARCHITECTURE.md | 143 + docs/DEBUG_UI.md | 220 + docs/DEVELOPMENT.md | 229 + emulator.go | 6 +- go.mod | 18 + go.sum | 49 + internals/WebUI/README.md | 47 +- internals/WebUI/angular.json | 133 +- internals/WebUI/dist/WebUI/favicon.ico | Bin 5430 -> 0 bytes internals/WebUI/dist/WebUI/index.html | 16 - internals/WebUI/dist/WebUI/main.js | 1118 - internals/WebUI/dist/WebUI/main.js.map | 1 - internals/WebUI/dist/WebUI/polyfills.js | 5811 - internals/WebUI/dist/WebUI/polyfills.js.map | 1 - internals/WebUI/dist/WebUI/runtime.js | 154 - internals/WebUI/dist/WebUI/runtime.js.map | 1 - internals/WebUI/dist/WebUI/styles.js | 606 - internals/WebUI/dist/WebUI/styles.js.map | 1 - internals/WebUI/dist/WebUI/vendor.js | 98901 ---------------- internals/WebUI/dist/WebUI/vendor.js.map | 1 - internals/WebUI/e2e/protractor.conf.js | 28 - internals/WebUI/e2e/src/app.e2e-spec.ts | 14 - internals/WebUI/e2e/src/app.po.ts | 11 - internals/WebUI/e2e/tsconfig.e2e.json | 13 - internals/WebUI/package-lock.json | 38237 ++---- internals/WebUI/package.json | 61 +- internals/WebUI/src/app/app-routing.module.ts | 10 - internals/WebUI/src/app/app.component.html | 16 - internals/WebUI/src/app/app.component.scss | 11 - internals/WebUI/src/app/app.component.spec.ts | 35 - internals/WebUI/src/app/app.component.ts | 42 +- internals/WebUI/src/app/app.module.ts | 47 - .../WebUI/src/app/cia/cia.component.html | 27 - .../WebUI/src/app/cia/cia.component.scss | 9 - .../WebUI/src/app/cia/cia.component.spec.ts | 25 - internals/WebUI/src/app/cia/cia.component.ts | 33 +- .../src/app/controls/controls.component.html | 14 - .../src/app/controls/controls.component.scss | 0 .../app/controls/controls.component.spec.ts | 25 - .../src/app/controls/controls.component.ts | 114 +- .../WebUI/src/app/cpu/cpu.component.html | 27 - .../WebUI/src/app/cpu/cpu.component.scss | 9 - .../WebUI/src/app/cpu/cpu.component.spec.ts | 25 - internals/WebUI/src/app/cpu/cpu.component.ts | 35 +- .../src/app/emulator/emulator.component.html | 33 - .../src/app/emulator/emulator.component.scss | 10 - .../app/emulator/emulator.component.spec.ts | 25 - .../src/app/emulator/emulator.component.ts | 40 +- .../WebUI/src/app/logs/logs.component.html | 12 - .../WebUI/src/app/logs/logs.component.scss | 0 .../WebUI/src/app/logs/logs.component.spec.ts | 25 - .../WebUI/src/app/logs/logs.component.ts | 56 - .../src/app/memory/memory.component.html | 14 - .../src/app/memory/memory.component.scss | 9 - .../src/app/memory/memory.component.spec.ts | 25 - .../WebUI/src/app/memory/memory.component.ts | 87 +- .../WebUI/src/app/models/ciastate.model.ts | 36 +- .../WebUI/src/app/models/cpustate.model.ts | 24 +- .../src/app/models/emulatorstate.model.ts | 14 +- .../WebUI/src/app/models/tablerow.model.ts | 8 +- .../WebUI/src/app/models/telemetry.model.ts | 8 +- .../app/services/tablehelper.service.spec.ts | 12 - .../src/app/services/tablehelper.service.ts | 32 +- .../app/services/telemetry.service.spec.ts | 12 - .../src/app/services/telemetry.service.ts | 27 +- .../app/services/websocket.service.spec.ts | 12 - .../src/app/services/websocket.service.ts | 37 +- internals/WebUI/src/browserslist | 11 - internals/WebUI/src/index.html | 7 +- internals/WebUI/src/karma.conf.js | 31 - internals/WebUI/src/main.ts | 19 +- internals/WebUI/src/polyfills.ts | 82 - internals/WebUI/src/styles.scss | 5 +- internals/WebUI/src/test.ts | 20 - internals/WebUI/src/tsconfig.app.json | 11 - internals/WebUI/src/tsconfig.spec.json | 18 - internals/WebUI/src/tslint.json | 17 - internals/WebUI/tsconfig.app.json | 9 + internals/WebUI/tsconfig.json | 31 +- internals/WebUI/tslint.json | 131 - internals/command_test.go | 194 + main.go | 4 +- numeric/numeric_test.go | 281 +- 97 files changed, 17347 insertions(+), 134396 deletions(-) create mode 100644 RAM/memory_test.go create mode 100644 VIC2/c64_char_converter_test.go create mode 100644 VIC2/c64_color_converter_test.go create mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/DEBUG_UI.md create mode 100644 docs/DEVELOPMENT.md create mode 100644 go.mod create mode 100644 go.sum delete mode 100644 internals/WebUI/dist/WebUI/favicon.ico delete mode 100644 internals/WebUI/dist/WebUI/index.html delete mode 100644 internals/WebUI/dist/WebUI/main.js delete mode 100644 internals/WebUI/dist/WebUI/main.js.map delete mode 100644 internals/WebUI/dist/WebUI/polyfills.js delete mode 100644 internals/WebUI/dist/WebUI/polyfills.js.map delete mode 100644 internals/WebUI/dist/WebUI/runtime.js delete mode 100644 internals/WebUI/dist/WebUI/runtime.js.map delete mode 100644 internals/WebUI/dist/WebUI/styles.js delete mode 100644 internals/WebUI/dist/WebUI/styles.js.map delete mode 100644 internals/WebUI/dist/WebUI/vendor.js delete mode 100644 internals/WebUI/dist/WebUI/vendor.js.map delete mode 100644 internals/WebUI/e2e/protractor.conf.js delete mode 100644 internals/WebUI/e2e/src/app.e2e-spec.ts delete mode 100644 internals/WebUI/e2e/src/app.po.ts delete mode 100644 internals/WebUI/e2e/tsconfig.e2e.json delete mode 100644 internals/WebUI/src/app/app-routing.module.ts delete mode 100644 internals/WebUI/src/app/app.component.html delete mode 100644 internals/WebUI/src/app/app.component.scss delete mode 100644 internals/WebUI/src/app/app.component.spec.ts delete mode 100644 internals/WebUI/src/app/app.module.ts delete mode 100644 internals/WebUI/src/app/cia/cia.component.html delete mode 100644 internals/WebUI/src/app/cia/cia.component.scss delete mode 100644 internals/WebUI/src/app/cia/cia.component.spec.ts delete mode 100644 internals/WebUI/src/app/controls/controls.component.html delete mode 100644 internals/WebUI/src/app/controls/controls.component.scss delete mode 100644 internals/WebUI/src/app/controls/controls.component.spec.ts delete mode 100644 internals/WebUI/src/app/cpu/cpu.component.html delete mode 100644 internals/WebUI/src/app/cpu/cpu.component.scss delete mode 100644 internals/WebUI/src/app/cpu/cpu.component.spec.ts delete mode 100644 internals/WebUI/src/app/emulator/emulator.component.html delete mode 100644 internals/WebUI/src/app/emulator/emulator.component.scss delete mode 100644 internals/WebUI/src/app/emulator/emulator.component.spec.ts delete mode 100644 internals/WebUI/src/app/logs/logs.component.html delete mode 100644 internals/WebUI/src/app/logs/logs.component.scss delete mode 100644 internals/WebUI/src/app/logs/logs.component.spec.ts delete mode 100644 internals/WebUI/src/app/logs/logs.component.ts delete mode 100644 internals/WebUI/src/app/memory/memory.component.html delete mode 100644 internals/WebUI/src/app/memory/memory.component.scss delete mode 100644 internals/WebUI/src/app/memory/memory.component.spec.ts delete mode 100644 internals/WebUI/src/app/services/tablehelper.service.spec.ts delete mode 100644 internals/WebUI/src/app/services/telemetry.service.spec.ts delete mode 100644 internals/WebUI/src/app/services/websocket.service.spec.ts delete mode 100644 internals/WebUI/src/browserslist delete mode 100644 internals/WebUI/src/karma.conf.js delete mode 100644 internals/WebUI/src/polyfills.ts delete mode 100644 internals/WebUI/src/test.ts delete mode 100644 internals/WebUI/src/tsconfig.app.json delete mode 100644 internals/WebUI/src/tsconfig.spec.json delete mode 100644 internals/WebUI/src/tslint.json create mode 100644 internals/WebUI/tsconfig.app.json delete mode 100644 internals/WebUI/tslint.json create mode 100644 internals/command_test.go diff --git a/.gitignore b/.gitignore index 999e745..7958b4b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ *.out log.txt -debug \ No newline at end of file +debuginternals/WebUI/.angular/ +internals/WebUI/node_modules/ +internals/WebUI/dist/ diff --git a/CIA/cia.go b/CIA/cia.go index 6b8eda0..f96c368 100644 --- a/CIA/cia.go +++ b/CIA/cia.go @@ -72,18 +72,18 @@ func (cia *CIA) SendInterrupt() { } func (cia *CIA) SetKey(row byte, col byte) { - log.Printf("[CIA] Setkey called") + log.Println("[CIA] Setkey called") cia.Keyboard_matrix[row] |= (1 << col) - log.Printf("[CIA] SetKey called with row " + strconv.Itoa(int(row)) + " and col " + strconv.Itoa(int(col))) + log.Println("[CIA] SetKey called with row " + strconv.Itoa(int(row)) + " and col " + strconv.Itoa(int(col))) log.Println("[CIA] Keyboard matrix current row:" + strconv.FormatInt(int64(cia.Keyboard_matrix[row]), 2)) } func (cia *CIA) UnsetKey(row byte, col byte) { - log.Printf("Unsetkey called") - cia.Keyboard_matrix[row] &= (0 << col) + log.Println("[CIA] Unsetkey called") + cia.Keyboard_matrix[row] &= ^(1 << col) - log.Printf("[CIA] UnsetKey called with row " + strconv.Itoa(int(row)) + " and col " + strconv.Itoa(int(col))) + log.Println("[CIA] UnsetKey called with row " + strconv.Itoa(int(row)) + " and col " + strconv.Itoa(int(col))) log.Println("[CIA] Keyboard matrix current row:" + strconv.FormatInt(int64(cia.Keyboard_matrix[row]), 2)) } diff --git a/CIA/cia_test.go b/CIA/cia_test.go index 93f25a4..1fd65cc 100644 --- a/CIA/cia_test.go +++ b/CIA/cia_test.go @@ -4,6 +4,178 @@ import ( "testing" ) +func TestCIA_NewCIA_Initialization(t *testing.T) { + irqChan := make(chan bool, 1) + cia := NewCIA(irqChan) + + if cia.Interrupt != false { + t.Errorf("Expected Interrupt to be false, got %v", cia.Interrupt) + } + if cia.PORT_A != 0x0 { + t.Errorf("Expected PORT_A to be 0x00, got 0x%02X", cia.PORT_A) + } + if cia.TIMER_A != 0x0 { + t.Errorf("Expected TIMER_A to be 0, got %d", cia.TIMER_A) + } + if cia.TIMER_A_ENABLED != false { + t.Errorf("Expected TIMER_A_ENABLED to be false, got %v", cia.TIMER_A_ENABLED) + } + if cia.TIMER_A_IRQ != false { + t.Errorf("Expected TIMER_A_IRQ to be false, got %v", cia.TIMER_A_IRQ) + } + if cia.TIMER_B != 0x0 { + t.Errorf("Expected TIMER_B to be 0, got %d", cia.TIMER_B) + } + if cia.TIMER_B_ENABLED != false { + t.Errorf("Expected TIMER_B_ENABLED to be false, got %v", cia.TIMER_B_ENABLED) + } + if cia.TIMER_B_IRQ != false { + t.Errorf("Expected TIMER_B_IRQ to be false, got %v", cia.TIMER_B_IRQ) + } + if len(cia.Keyboard_matrix) != 8 { + t.Errorf("Expected keyboard matrix length 8, got %d", len(cia.Keyboard_matrix)) + } + if cia.IrqChannel == nil { + t.Errorf("Expected IrqChannel to be set, got nil") + } +} + +func TestCIA_NewCIA_NilChannel(t *testing.T) { + cia := NewCIA(nil) + + if cia.IrqChannel != nil { + t.Errorf("Expected IrqChannel to be nil") + } + if len(cia.Keyboard_matrix) != 8 { + t.Errorf("Expected keyboard matrix length 8, got %d", len(cia.Keyboard_matrix)) + } +} + +func TestCIA_ExecuteCycle_UpdatesPreviousCycles(t *testing.T) { + cia := NewCIA(nil) + + cia.ExecuteCycle(100) + if cia.Previous_cpu_cycles != 100 { + t.Errorf("Expected Previous_cpu_cycles to be 100, got %d", cia.Previous_cpu_cycles) + } + + cia.ExecuteCycle(200) + if cia.Previous_cpu_cycles != 200 { + t.Errorf("Expected Previous_cpu_cycles to be 200, got %d", cia.Previous_cpu_cycles) + } +} + +func TestCIA_SendInterrupt_SetsFlag(t *testing.T) { + cia := NewCIA(nil) + + if cia.Interrupt != false { + t.Errorf("Expected Interrupt to initially be false") + } + + cia.SendInterrupt() + + if cia.Interrupt != true { + t.Errorf("Expected Interrupt to be true after SendInterrupt, got %v", cia.Interrupt) + } +} + +func TestCIA_ResetKeyboardMatrix_ClearsAll(t *testing.T) { + cia := NewCIA(nil) + + // Set some keys + cia.SetKey(0, 0) + cia.SetKey(1, 2) + cia.SetKey(3, 5) + cia.SetKey(7, 7) + + // Verify keys are set + if cia.Keyboard_matrix[0] == 0 { + t.Errorf("Expected matrix[0] to be non-zero after SetKey") + } + + // Reset + cia.ResetKeyboardMatrix() + + // Verify all cleared + for i := 0; i < 8; i++ { + if cia.Keyboard_matrix[i] != 0 { + t.Errorf("Expected keyboard matrix[%d] to be 0 after reset, got %d", i, cia.Keyboard_matrix[i]) + } + } +} + +func TestCIA_Write_SetsPortA(t *testing.T) { + cia := NewCIA(nil) + + cia.Write(CIA_PORT_A, 0xFD) + + if cia.PORT_A != 0xFD { + t.Errorf("Expected PORT_A to be 0xFD, got 0x%02X", cia.PORT_A) + } +} + +func TestCIA_Write_SetsPortA_AllValues(t *testing.T) { + cia := NewCIA(nil) + + testValues := []byte{0x00, 0x01, 0x7F, 0x80, 0xFE, 0xFF} + for _, val := range testValues { + cia.Write(CIA_PORT_A, val) + if cia.PORT_A != val { + t.Errorf("Expected PORT_A to be 0x%02X, got 0x%02X", val, cia.PORT_A) + } + } +} + +func TestCIA_Read_ReturnsRegisterValue(t *testing.T) { + cia := NewCIA(nil) + + // Set a key and configure PORT_A to read that row + cia.SetKey(0, 3) // row 0, col 3 + cia.WriteRegister(0xFE) // bit 0 clear = read row 0 + + result := cia.Read(CIA_PORT_B) + + // ReadRegister should return the keyboard scan with inversion + // Row 0 has bit 3 set (from SetKey), PORT_A bit 0 is clear so row 0 is read + // Result = keyboard_matrix[0] = 0x08, inverted = 0xF7 + expected := byte(0x08) ^ 0xFF + if result != expected { + t.Errorf("Expected Read to return 0x%02X, got 0x%02X", expected, result) + } +} + +func TestCIA_UnsetKey(t *testing.T) { + cia := NewCIA(nil) + + // Set multiple keys in same row + cia.SetKey(2, 3) + cia.SetKey(2, 5) + + // Verify both are set: bit 3 and bit 5 = 0010 1000 = 0x28 + if cia.Keyboard_matrix[2] != 0x28 { + t.Errorf("Expected matrix[2] = 0x28, got 0x%02X", cia.Keyboard_matrix[2]) + } + + // Unset one key + cia.UnsetKey(2, 3) + + // Only bit 5 should remain: 0010 0000 = 0x20 + if cia.Keyboard_matrix[2] != 0x20 { + t.Errorf("Expected matrix[2] = 0x20 after UnsetKey, got 0x%02X", cia.Keyboard_matrix[2]) + } +} + +func TestCIA_UnsetKey_ClearsAll(t *testing.T) { + cia := NewCIA(nil) + + cia.SetKey(4, 6) + cia.UnsetKey(4, 6) + + if cia.Keyboard_matrix[4] != 0 { + t.Errorf("Expected matrix[4] = 0 after unsetting only key, got 0x%02X", cia.Keyboard_matrix[4]) + } +} + func TestCIA_SetKey_SetsMatrixProperly_SingleKey(t *testing.T) { // Arrange cia := NewCIA(nil) @@ -43,14 +215,16 @@ func TestCIA_ReadRegister_ReturnsCorrectValue_SingleKey(t *testing.T) { // Act cia.SetKey(1, 2) - cia.WriteRegister(253) // 1111 1101 - read 2nd row values + cia.WriteRegister(253) // 1111 1101 - read 2nd row values (bit 1 clear) // Assert rowValue := cia.ReadRegister() - // 0000 0100 - if rowValue != 4 { - t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, 4) + // matrix[1] = 0x04, result = 0x04 ^ 0xFF = 0xFB (251) + // ReadRegister inverts the bits (active-low signaling) + expected := byte(0x04 ^ 0xFF) + if rowValue != expected { + t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, expected) } } @@ -60,14 +234,14 @@ func TestCIA_ReadRegister_ReturnsZeroValue_SingleKey(t *testing.T) { // Act cia.SetKey(1, 2) - cia.WriteRegister(0xFF) // 1111 1111 - ignore all row values + cia.WriteRegister(0xFF) // 1111 1111 - all bits set, no rows read // Assert rowValue := cia.ReadRegister() - // 0000 0000 - if rowValue != 0 { - t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, 0) + // No rows read (all PORT_A bits high), result = 0x00 ^ 0xFF = 0xFF + if rowValue != 0xFF { + t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, 0xFF) } } @@ -78,13 +252,38 @@ func TestCIA_ReadRegister_ReturnsCorrectValue_MultipleKey(t *testing.T) { // Act cia.SetKey(1, 2) cia.SetKey(1, 4) - cia.WriteRegister(253) // 1111 1001 - read 2nd row values + cia.WriteRegister(253) // 1111 1101 - bit 1 clear, read row 1 values // Assert rowValue := cia.ReadRegister() - // 0001 0100 - if rowValue != 20 { - t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, 20) + // matrix[1] = 0x14 (bit 2 + bit 4), result = 0x14 ^ 0xFF = 0xEB (235) + expected := byte(0x14 ^ 0xFF) + if rowValue != expected { + t.Errorf("Keyboard matrix value was incorrect, got: %d, want: %d.", rowValue, expected) + } +} + +func TestCIA_WriteRegister_SetsPortA(t *testing.T) { + cia := NewCIA(nil) + + cia.WriteRegister(0xAB) + + if cia.PORT_A != 0xAB { + t.Errorf("Expected PORT_A to be 0xAB, got 0x%02X", cia.PORT_A) + } +} + +func TestCIA_ReadRegister_NoKeysPressed_ReturnsZero(t *testing.T) { + cia := NewCIA(nil) + + // No keys set, all matrix bytes are 0 + cia.WriteRegister(0x00) // All rows enabled + + result := cia.ReadRegister() + + // No keys pressed, OR of all zeros = 0, XOR 0xFF = 0xFF + if result != 0xFF { + t.Errorf("Expected 0xFF when no keys pressed, got 0x%02X", result) } } diff --git a/CIA/keyboard.go b/CIA/keyboard.go index 160d93b..f9600b7 100644 --- a/CIA/keyboard.go +++ b/CIA/keyboard.go @@ -4,7 +4,7 @@ import ( "log" "strconv" - "github.com/gdamore/tcell" + "github.com/gdamore/tcell/v2" ) type Pair struct { diff --git a/MOS6510/cpu_instructions_test.go b/MOS6510/cpu_instructions_test.go index f8ad869..fc15433 100644 --- a/MOS6510/cpu_instructions_test.go +++ b/MOS6510/cpu_instructions_test.go @@ -4,368 +4,2510 @@ import ( "testing" ) -func TestCPU_RTS(t *testing.T) { - // Arrange +// ============================================================================= +// LDA - Load Accumulator +// ============================================================================= + +func TestCPU_LDA_Immediate(t *testing.T) { cpu := getTestCPU() - cpu.stackPush(0) - cpu.stackPush(100) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x42) - // Act - cpu.RTS(1) + cpu.LDA(Immidiate) - // Assert PC == fromS + 1 - if cpu.PC != 101 { - t.Errorf("Wrong PC value after RTS operation, got: %d, want: %d.", cpu.PC, 101) + if cpu.A != 0x42 { + t.Errorf("LDA immediate: got A=%d, want %d", cpu.A, 0x42) + } + if cpu.PC != 0x201 { + t.Errorf("LDA immediate: got PC=%d, want %d", cpu.PC, 0x201) + } + if cpu.getStatusZero() { + t.Error("LDA immediate: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("LDA immediate: negative flag should be clear") } } -// Add memory to accumulator with carry -func TestCPU_ADC_zeropage_noCarry(t *testing.T) { - // Arrange +func TestCPU_LDA_Immediate_Zero(t *testing.T) { cpu := getTestCPU() - cpu.PC = 1000 - cpu.Memory.WriteAbsolute(1000, 100) - cpu.Memory.WriteZeroPage(100, 100) + cpu.PC = 0x200 + cpu.A = 0x55 + cpu.Memory.WriteAbsolute(0x200, 0x00) - // Act - cpu.ADC(9) + cpu.LDA(Immidiate) - // Assert - if cpu.A != 100 { - t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 100) + if cpu.A != 0x00 { + t.Errorf("LDA immediate zero: got A=%d, want %d", cpu.A, 0x00) } - - if cpu.PC != 1001 { - t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1) + if !cpu.getStatusZero() { + t.Error("LDA immediate zero: zero flag should be set") + } + if cpu.getStatusNegative() { + t.Error("LDA immediate zero: negative flag should be clear") } } -func TestCPU_ADC_zeropage_initialCarry(t *testing.T) { - // Arrange +func TestCPU_LDA_Immediate_Negative(t *testing.T) { cpu := getTestCPU() - cpu.PC = 1000 - cpu.Memory.WriteAbsolute(1000, 100) - cpu.Memory.WriteZeroPage(100, 100) - cpu.setStatusCarry(true) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x80) - // Act - cpu.ADC(9) + cpu.LDA(Immidiate) - // Assert - if cpu.A != 101 { - t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 101) + if cpu.A != 0x80 { + t.Errorf("LDA immediate negative: got A=%d, want %d", cpu.A, 0x80) } - - if cpu.getStatusCarry() { - t.Error("Carry flag should be cleared") + if cpu.getStatusZero() { + t.Error("LDA immediate negative: zero flag should be clear") } - - if cpu.PC != 1001 { - t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1001) + if !cpu.getStatusNegative() { + t.Error("LDA immediate negative: negative flag should be set") } +} - if cpu.getStatusZero() { - t.Errorf("Wrong Zero status flag value after ADC operation, got: %t, want: %t.", cpu.getStatusZero(), false) +func TestCPU_LDA_ZeroPage(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) // zp address + cpu.Memory.WriteZeroPage(0x50, 0x77) // value at zp address + + cpu.LDA(ZeroPage) + + if cpu.A != 0x77 { + t.Errorf("LDA zeropage: got A=%d, want %d", cpu.A, 0x77) + } + if cpu.PC != 0x201 { + t.Errorf("LDA zeropage: got PC=%d, want %d", cpu.PC, 0x201) } } -func TestCPU_ADC_zeropage_carryOver(t *testing.T) { - // Arrange +func TestCPU_LDA_Absolute(t *testing.T) { cpu := getTestCPU() - cpu.A = 255 - cpu.PC = 1000 - cpu.Memory.WriteAbsolute(1000, 100) - cpu.Memory.WriteZeroPage(100, 1) - cpu.setStatusCarry(false) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x00) // low byte of address + cpu.Memory.WriteAbsolute(0x201, 0x04) // high byte of address -> 0x0400 + cpu.Memory.WriteAbsolute(0x0400, 0xAB) - // Act - cpu.ADC(9) + cpu.LDA(Absolute) - // Assert - if cpu.A != 0 { - t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 0) + if cpu.A != 0xAB { + t.Errorf("LDA absolute: got A=%d, want %d", cpu.A, 0xAB) + } + if cpu.PC != 0x202 { + t.Errorf("LDA absolute: got PC=%d, want %d", cpu.PC, 0x202) } +} - if !cpu.getStatusCarry() { - t.Error("Carry flag should be set") +// ============================================================================= +// LDX - Load X Register +// ============================================================================= + +func TestCPU_LDX_Immediate(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x42) + + cpu.LDX(Immidiate) + + if cpu.X != 0x42 { + t.Errorf("LDX immediate: got X=%d, want %d", cpu.X, 0x42) + } + if cpu.PC != 0x201 { + t.Errorf("LDX immediate: got PC=%d, want %d", cpu.PC, 0x201) } + if cpu.getStatusZero() { + t.Error("LDX immediate: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("LDX immediate: negative flag should be clear") + } +} + +func TestCPU_LDX_Immediate_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0x55 + cpu.Memory.WriteAbsolute(0x200, 0x00) + + cpu.LDX(Immidiate) + if cpu.X != 0x00 { + t.Errorf("LDX immediate zero: got X=%d, want %d", cpu.X, 0x00) + } if !cpu.getStatusZero() { - t.Error("Zero flag should be set") + t.Error("LDX immediate zero: zero flag should be set") } +} - if cpu.PC != 1001 { - t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1) +func TestCPU_LDX_Immediate_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0xFF) + + cpu.LDX(Immidiate) + + if cpu.X != 0xFF { + t.Errorf("LDX immediate negative: got X=%d, want %d", cpu.X, 0xFF) + } + if !cpu.getStatusNegative() { + t.Error("LDX immediate negative: negative flag should be set") } } -func TestCPU_ADC_zeropage_overflow_set(t *testing.T) { - // Arrange +func TestCPU_LDX_ZeroPage(t *testing.T) { cpu := getTestCPU() - cpu.A = 127 - cpu.PC = 1000 - cpu.Memory.WriteAbsolute(1000, 100) - cpu.Memory.WriteZeroPage(100, 1) - cpu.setStatusCarry(false) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x30) + cpu.Memory.WriteZeroPage(0x30, 0x99) - // Act - cpu.ADC(9) + cpu.LDX(ZeroPage) - // Assert - if cpu.A != 128 { - t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 128) + if cpu.X != 0x99 { + t.Errorf("LDX zeropage: got X=%d, want %d", cpu.X, 0x99) } +} - if !cpu.getStatusOverflow() { - t.Error("Overflow flag should be set") +// ============================================================================= +// LDY - Load Y Register +// ============================================================================= + +func TestCPU_LDY_Immediate(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x42) + + cpu.LDY(Immidiate) + + if cpu.Y != 0x42 { + t.Errorf("LDY immediate: got Y=%d, want %d", cpu.Y, 0x42) + } + if cpu.PC != 0x201 { + t.Errorf("LDY immediate: got PC=%d, want %d", cpu.PC, 0x201) } } -func TestCPU_BCS_carrySet(t *testing.T) { - // Arrange +func TestCPU_LDY_Immediate_Zero(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.setStatusCarry(true) - cpu.Memory.WriteZeroPage(0, 16) + cpu.PC = 0x200 + cpu.Y = 0x55 + cpu.Memory.WriteAbsolute(0x200, 0x00) - // Act - cpu.BCS(1) + cpu.LDY(Immidiate) - // Assert - if cpu.PC != 17 { - t.Errorf("Wrong PC value after BCS operation, got: %d, want: %d.", cpu.PC, 17) + if cpu.Y != 0x00 { + t.Errorf("LDY immediate zero: got Y=%d, want %d", cpu.Y, 0x00) + } + if !cpu.getStatusZero() { + t.Error("LDY immediate zero: zero flag should be set") } } -func TestCPU_BCS_carryUnset(t *testing.T) { - // Arrange +func TestCPU_LDY_Immediate_Negative(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.Memory.WriteZeroPage(0, 16) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0xFE) - // Act - cpu.BCS(1) + cpu.LDY(Immidiate) - // Assert - if cpu.PC != 1 { - t.Errorf("Wrong PC value after BCS operation, got: %d, want: %d.", cpu.PC, 1) + if cpu.Y != 0xFE { + t.Errorf("LDY immediate negative: got Y=%d, want %d", cpu.Y, 0xFE) + } + if !cpu.getStatusNegative() { + t.Error("LDY immediate negative: negative flag should be set") } } -func TestCPU_BPL_negativeSet(t *testing.T) { - // Arrange +func TestCPU_LDY_ZeroPage(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.setStatusNegative(false) - cpu.Memory.WriteZeroPage(0, 16) + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x40) + cpu.Memory.WriteZeroPage(0x40, 0xBB) - // Act - cpu.BPL(1) + cpu.LDY(ZeroPage) - // Assert - if cpu.PC != 17 { - t.Errorf("Wrong PC value after BPL operation, got: %d, want: %d.", cpu.PC, 17) + if cpu.Y != 0xBB { + t.Errorf("LDY zeropage: got Y=%d, want %d", cpu.Y, 0xBB) } } -func TestCPU_BPL_negativeUnset(t *testing.T) { - // Arrange +// ============================================================================= +// STA - Store Accumulator +// ============================================================================= + +func TestCPU_STA_ZeroPage(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.setStatusNegative(true) - cpu.Memory.WriteZeroPage(0, 16) + cpu.PC = 0x200 + cpu.A = 0x42 + cpu.Memory.WriteAbsolute(0x200, 0x50) // zp address to store to - // Act - cpu.BPL(1) + cpu.STA(ZeroPage) - // Assert - if cpu.PC != 1 { - t.Errorf("Wrong PC value after BPL operation, got: %d, want: %d.", cpu.PC, 1) + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x42 { + t.Errorf("STA zeropage: got mem[0x50]=%d, want %d", val, 0x42) + } + if cpu.PC != 0x201 { + t.Errorf("STA zeropage: got PC=%d, want %d", cpu.PC, 0x201) } } -func TestCPU_ASL_carry(t *testing.T) { - // Arrange +func TestCPU_STA_Absolute(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.A = 128 + cpu.PC = 0x200 + cpu.A = 0x99 + cpu.Memory.WriteAbsolute(0x200, 0x00) // low byte + cpu.Memory.WriteAbsolute(0x201, 0x04) // high byte -> 0x0400 - // Act - cpu.ASL(12) + cpu.STA(Absolute) - // Assert - if !cpu.getStatusCarry() { - t.Error("Status carry flag should be set!") + val := cpu.Memory.ReadAbsolute(0x0400) + if val != 0x99 { + t.Errorf("STA absolute: got mem[0x0400]=%d, want %d", val, 0x99) } - - if cpu.getStatusNegative() { - t.Error("Status Negative flag should be set!") + if cpu.PC != 0x202 { + t.Errorf("STA absolute: got PC=%d, want %d", cpu.PC, 0x202) } +} + +func TestCPU_STA_ZeroPageX(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x77 + cpu.X = 0x05 + cpu.Memory.WriteAbsolute(0x200, 0x10) // zp base address - if cpu.PC != 0 { - t.Errorf("Wrong PC value after ASL operation, got: %d, want: %d.", cpu.PC, 0) + cpu.STA(ZeroPageX) + + val := cpu.Memory.ReadZeroPage(0x15) // 0x10 + 0x05 + if val != 0x77 { + t.Errorf("STA zeropageX: got mem[0x15]=%d, want %d", val, 0x77) } } -func TestCPU_ASL_negative(t *testing.T) { - // Arrange +// ============================================================================= +// STX - Store X Register +// ============================================================================= + +func TestCPU_STX_ZeroPage(t *testing.T) { cpu := getTestCPU() - cpu.PC = 0 - cpu.A = 127 + cpu.PC = 0x200 + cpu.X = 0x55 + cpu.Memory.WriteAbsolute(0x200, 0x30) - // Act - cpu.ASL(12) + cpu.STX(ZeroPage) - // Assert - if cpu.getStatusCarry() { - t.Error("Status carry flag should be clear!") + val := cpu.Memory.ReadZeroPage(0x30) + if val != 0x55 { + t.Errorf("STX zeropage: got mem[0x30]=%d, want %d", val, 0x55) } - - if !cpu.getStatusNegative() { - t.Error("Status Negative flag should be set!") + if cpu.PC != 0x201 { + t.Errorf("STX zeropage: got PC=%d, want %d", cpu.PC, 0x201) } +} + +func TestCPU_STX_Absolute(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0xAA + cpu.Memory.WriteAbsolute(0x200, 0x00) + cpu.Memory.WriteAbsolute(0x201, 0x05) // -> 0x0500 + + cpu.STX(Absolute) - if cpu.PC != 0 { - t.Errorf("Wrong PC value after ASL operation, got: %d, want: %d.", cpu.PC, 0) + val := cpu.Memory.ReadAbsolute(0x0500) + if val != 0xAA { + t.Errorf("STX absolute: got mem[0x0500]=%d, want %d", val, 0xAA) + } + if cpu.PC != 0x202 { + t.Errorf("STX absolute: got PC=%d, want %d", cpu.PC, 0x202) } } -func TestCPU_JSR(t *testing.T) { - // TODO -} +func TestCPU_STX_ZeroPageY(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0xBB + cpu.Y = 0x03 + cpu.Memory.WriteAbsolute(0x200, 0x10) -func TestCPU_BNE(t *testing.T) { - // TODO -} + cpu.STX(ZeroPageY) -func TestCPU_BEQ(t *testing.T) { - // TODO + val := cpu.Memory.ReadZeroPage(0x13) // 0x10 + 0x03 + if val != 0xBB { + t.Errorf("STX zeropageY: got mem[0x13]=%d, want %d", val, 0xBB) + } } -func TestCPU_CPX(t *testing.T) { - // TODO -} +// ============================================================================= +// STY - Store Y Register +// ============================================================================= -func TestCPU_DEX(t *testing.T) { - // TODO -} +func TestCPU_STY_ZeroPage(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0x66 + cpu.Memory.WriteAbsolute(0x200, 0x20) -func TestCPU_DEY(t *testing.T) { - // TODO -} + cpu.STY(ZeroPage) -func TestCPU_INX(t *testing.T) { - // TODO + val := cpu.Memory.ReadZeroPage(0x20) + if val != 0x66 { + t.Errorf("STY zeropage: got mem[0x20]=%d, want %d", val, 0x66) + } + if cpu.PC != 0x201 { + t.Errorf("STY zeropage: got PC=%d, want %d", cpu.PC, 0x201) + } } -func TestCPU_INY(t *testing.T) { - // TODO -} +func TestCPU_STY_Absolute(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0xCC + cpu.Memory.WriteAbsolute(0x200, 0x00) + cpu.Memory.WriteAbsolute(0x201, 0x06) // -> 0x0600 -func TestCPU_LDA(t *testing.T) { - // TODO -} + cpu.STY(Absolute) -func TestCPU_LDX(t *testing.T) { - // TODO + val := cpu.Memory.ReadAbsolute(0x0600) + if val != 0xCC { + t.Errorf("STY absolute: got mem[0x0600]=%d, want %d", val, 0xCC) + } + if cpu.PC != 0x202 { + t.Errorf("STY absolute: got PC=%d, want %d", cpu.PC, 0x202) + } } -func TestCPU_LDY(t *testing.T) { - // TODO -} +func TestCPU_STY_ZeroPageX(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0xDD + cpu.X = 0x02 + cpu.Memory.WriteAbsolute(0x200, 0x20) -func TestCPU_STA(t *testing.T) { - // TODO -} + cpu.STY(ZeroPageX) -func TestCPU_STX(t *testing.T) { - // TODO + val := cpu.Memory.ReadZeroPage(0x22) // 0x20 + 0x02 + if val != 0xDD { + t.Errorf("STY zeropageX: got mem[0x22]=%d, want %d", val, 0xDD) + } } -func TestCPU_STY(t *testing.T) { - // TODO -} +// ============================================================================= +// TAX - Transfer A to X +// ============================================================================= -func TestCPU_TAX(t *testing.T) { - // TODO -} +func TestCPU_TAX_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x42 -func TestCPU_TXA(t *testing.T) { - // TODO -} + cpu.TAX(Implied) -func TestCPU_TAY(t *testing.T) { - // TODO + if cpu.X != 0x42 { + t.Errorf("TAX: got X=%d, want %d", cpu.X, 0x42) + } + if cpu.getStatusZero() { + t.Error("TAX: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("TAX: negative flag should be clear") + } } -func TestCPU_TYA(t *testing.T) { - // TODO -} +func TestCPU_TAX_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x00 + cpu.X = 0x55 -func TestCPU_AND(t *testing.T) { - // TODO -} + cpu.TAX(Implied) -func TestCPU_INC(t *testing.T) { - // TODO + if cpu.X != 0x00 { + t.Errorf("TAX zero: got X=%d, want %d", cpu.X, 0x00) + } + if !cpu.getStatusZero() { + t.Error("TAX zero: zero flag should be set") + } } -func TestCPU_JMP(t *testing.T) { - // TODO +func TestCPU_TAX_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x80 + + cpu.TAX(Implied) + + if cpu.X != 0x80 { + t.Errorf("TAX negative: got X=%d, want %d", cpu.X, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("TAX negative: negative flag should be set") + } } -func TestCPU_CMP(t *testing.T) { - // TODO +// ============================================================================= +// TXA - Transfer X to A +// ============================================================================= + +func TestCPU_TXA_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x33 + + cpu.TXA(Implied) + + if cpu.A != 0x33 { + t.Errorf("TXA: got A=%d, want %d", cpu.A, 0x33) + } + if cpu.getStatusZero() { + t.Error("TXA: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("TXA: negative flag should be clear") + } } -func TestCPU_SEC(t *testing.T) { - // TODO +func TestCPU_TXA_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x00 + cpu.A = 0x55 + + cpu.TXA(Implied) + + if cpu.A != 0x00 { + t.Errorf("TXA zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("TXA zero: zero flag should be set") + } } -func TestCPU_SBC(t *testing.T) { - // TODO +func TestCPU_TXA_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0xFE + + cpu.TXA(Implied) + + if cpu.A != 0xFE { + t.Errorf("TXA negative: got A=%d, want %d", cpu.A, 0xFE) + } + if !cpu.getStatusNegative() { + t.Error("TXA negative: negative flag should be set") + } } -func TestCPU_ROR(t *testing.T) { - // TODO +// ============================================================================= +// TAY - Transfer A to Y +// ============================================================================= + +func TestCPU_TAY_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x42 + + cpu.TAY(Implied) + + if cpu.Y != 0x42 { + t.Errorf("TAY: got Y=%d, want %d", cpu.Y, 0x42) + } + if cpu.getStatusZero() { + t.Error("TAY: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("TAY: negative flag should be clear") + } } -func TestCPU_EOR(t *testing.T) { - // TODO +func TestCPU_TAY_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x00 + cpu.Y = 0x55 + + cpu.TAY(Implied) + + if cpu.Y != 0x00 { + t.Errorf("TAY zero: got Y=%d, want %d", cpu.Y, 0x00) + } + if !cpu.getStatusZero() { + t.Error("TAY zero: zero flag should be set") + } } -func TestCPU_CPY(t *testing.T) { - // TODO +func TestCPU_TAY_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x90 + + cpu.TAY(Implied) + + if cpu.Y != 0x90 { + t.Errorf("TAY negative: got Y=%d, want %d", cpu.Y, 0x90) + } + if !cpu.getStatusNegative() { + t.Error("TAY negative: negative flag should be set") + } } -func TestCPU_BCC(t *testing.T) { - // TODO +// ============================================================================= +// TYA - Transfer Y to A +// ============================================================================= + +func TestCPU_TYA_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x33 + + cpu.TYA(Implied) + + if cpu.A != 0x33 { + t.Errorf("TYA: got A=%d, want %d", cpu.A, 0x33) + } + if cpu.getStatusZero() { + t.Error("TYA: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("TYA: negative flag should be clear") + } } -func TestCPU_BMI(t *testing.T) { - // TODO +func TestCPU_TYA_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x00 + cpu.A = 0x55 + + cpu.TYA(Implied) + + if cpu.A != 0x00 { + t.Errorf("TYA zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("TYA zero: zero flag should be set") + } } -func TestCPU_CLC(t *testing.T) { - // TODO +func TestCPU_TYA_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0xC0 + + cpu.TYA(Implied) + + if cpu.A != 0xC0 { + t.Errorf("TYA negative: got A=%d, want %d", cpu.A, 0xC0) + } + if !cpu.getStatusNegative() { + t.Error("TYA negative: negative flag should be set") + } } -func TestCPU_PHA(t *testing.T) { - // TODO +// ============================================================================= +// INX - Increment X +// ============================================================================= + +func TestCPU_INX_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x10 + + cpu.INX(Implied) + + if cpu.X != 0x11 { + t.Errorf("INX: got X=%d, want %d", cpu.X, 0x11) + } + if cpu.getStatusZero() { + t.Error("INX: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("INX: negative flag should be clear") + } } -func TestCPU_PLA(t *testing.T) { - // TODO +func TestCPU_INX_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0xFF + + cpu.INX(Implied) + + if cpu.X != 0x00 { + t.Errorf("INX wrap: got X=%d, want %d", cpu.X, 0x00) + } + if !cpu.getStatusZero() { + t.Error("INX wrap: zero flag should be set") + } + if cpu.getStatusNegative() { + t.Error("INX wrap: negative flag should be clear") + } } -func TestCPU_TSX(t *testing.T) { - // TODO +func TestCPU_INX_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x7F + + cpu.INX(Implied) + + if cpu.X != 0x80 { + t.Errorf("INX negative: got X=%d, want %d", cpu.X, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("INX negative: negative flag should be set") + } } -func TestCPU_PLP(t *testing.T) { - // TODO +// ============================================================================= +// INY - Increment Y +// ============================================================================= + +func TestCPU_INY_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x10 + + cpu.INY(Implied) + + if cpu.Y != 0x11 { + t.Errorf("INY: got Y=%d, want %d", cpu.Y, 0x11) + } + if cpu.getStatusZero() { + t.Error("INY: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("INY: negative flag should be clear") + } } -func TestCPU_BVS(t *testing.T) { - // TODO +func TestCPU_INY_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0xFF + + cpu.INY(Implied) + + if cpu.Y != 0x00 { + t.Errorf("INY wrap: got Y=%d, want %d", cpu.Y, 0x00) + } + if !cpu.getStatusZero() { + t.Error("INY wrap: zero flag should be set") + } +} + +func TestCPU_INY_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x7F + + cpu.INY(Implied) + + if cpu.Y != 0x80 { + t.Errorf("INY negative: got Y=%d, want %d", cpu.Y, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("INY negative: negative flag should be set") + } +} + +// ============================================================================= +// DEX - Decrement X +// ============================================================================= + +func TestCPU_DEX_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x10 + + cpu.DEX(Implied) + + if cpu.X != 0x0F { + t.Errorf("DEX: got X=%d, want %d", cpu.X, 0x0F) + } + if cpu.getStatusZero() { + t.Error("DEX: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("DEX: negative flag should be clear") + } +} + +func TestCPU_DEX_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x01 + + cpu.DEX(Implied) + + if cpu.X != 0x00 { + t.Errorf("DEX zero: got X=%d, want %d", cpu.X, 0x00) + } + if !cpu.getStatusZero() { + t.Error("DEX zero: zero flag should be set") + } +} + +func TestCPU_DEX_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x00 + + cpu.DEX(Implied) + + if cpu.X != 0xFF { + t.Errorf("DEX wrap: got X=%d, want %d", cpu.X, 0xFF) + } + if !cpu.getStatusNegative() { + t.Error("DEX wrap: negative flag should be set") + } + if cpu.getStatusZero() { + t.Error("DEX wrap: zero flag should be clear") + } +} + +// ============================================================================= +// DEY - Decrement Y +// ============================================================================= + +func TestCPU_DEY_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x10 + + cpu.DEY(Implied) + + if cpu.Y != 0x0F { + t.Errorf("DEY: got Y=%d, want %d", cpu.Y, 0x0F) + } + if cpu.getStatusZero() { + t.Error("DEY: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("DEY: negative flag should be clear") + } +} + +func TestCPU_DEY_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x01 + + cpu.DEY(Implied) + + if cpu.Y != 0x00 { + t.Errorf("DEY zero: got Y=%d, want %d", cpu.Y, 0x00) + } + if !cpu.getStatusZero() { + t.Error("DEY zero: zero flag should be set") + } +} + +func TestCPU_DEY_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.Y = 0x00 + + cpu.DEY(Implied) + + if cpu.Y != 0xFF { + t.Errorf("DEY wrap: got Y=%d, want %d", cpu.Y, 0xFF) + } + if !cpu.getStatusNegative() { + t.Error("DEY wrap: negative flag should be set") + } +} + +// ============================================================================= +// INC - Increment Memory +// ============================================================================= + +func TestCPU_INC_ZeroPage(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) // zp address + cpu.Memory.WriteZeroPage(0x50, 0x10) // value + + cpu.INC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x11 { + t.Errorf("INC zeropage: got mem[0x50]=%d, want %d", val, 0x11) + } + if cpu.getStatusZero() { + t.Error("INC zeropage: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("INC zeropage: negative flag should be clear") + } +} + +func TestCPU_INC_ZeroPage_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0xFF) + + cpu.INC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x00 { + t.Errorf("INC zeropage wrap: got mem[0x50]=%d, want %d", val, 0x00) + } + if !cpu.getStatusZero() { + t.Error("INC zeropage wrap: zero flag should be set") + } +} + +func TestCPU_INC_ZeroPage_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x7F) + + cpu.INC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x80 { + t.Errorf("INC zeropage neg: got mem[0x50]=%d, want %d", val, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("INC zeropage neg: negative flag should be set") + } +} + +// ============================================================================= +// DEC - Decrement Memory +// ============================================================================= + +func TestCPU_DEC_ZeroPage(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x10) + + cpu.DEC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x0F { + t.Errorf("DEC zeropage: got mem[0x50]=%d, want %d", val, 0x0F) + } + if cpu.getStatusZero() { + t.Error("DEC zeropage: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("DEC zeropage: negative flag should be clear") + } +} + +func TestCPU_DEC_ZeroPage_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x01) + + cpu.DEC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x00 { + t.Errorf("DEC zeropage zero: got mem[0x50]=%d, want %d", val, 0x00) + } + if !cpu.getStatusZero() { + t.Error("DEC zeropage zero: zero flag should be set") + } +} + +func TestCPU_DEC_ZeroPage_Wrap(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x00) + + cpu.DEC(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0xFF { + t.Errorf("DEC zeropage wrap: got mem[0x50]=%d, want %d", val, 0xFF) + } + if !cpu.getStatusNegative() { + t.Error("DEC zeropage wrap: negative flag should be set") + } +} + +// ============================================================================= +// AND - Logical AND +// ============================================================================= + +func TestCPU_AND_Immediate(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xFF + cpu.Memory.WriteAbsolute(0x200, 0x0F) + + cpu.AND(Immidiate) + + if cpu.A != 0x0F { + t.Errorf("AND immediate: got A=%d, want %d", cpu.A, 0x0F) + } + if cpu.getStatusZero() { + t.Error("AND immediate: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("AND immediate: negative flag should be clear") + } +} + +func TestCPU_AND_Immediate_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xF0 + cpu.Memory.WriteAbsolute(0x200, 0x0F) + + cpu.AND(Immidiate) + + if cpu.A != 0x00 { + t.Errorf("AND immediate zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("AND immediate zero: zero flag should be set") + } +} + +func TestCPU_AND_Immediate_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xFF + cpu.Memory.WriteAbsolute(0x200, 0x80) + + cpu.AND(Immidiate) + + if cpu.A != 0x80 { + t.Errorf("AND immediate neg: got A=%d, want %d", cpu.A, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("AND immediate neg: negative flag should be set") + } +} + +// ============================================================================= +// ORA - Logical OR +// ============================================================================= + +func TestCPU_ORA_Immediate(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xF0 + cpu.Memory.WriteAbsolute(0x200, 0x0F) + + cpu.ORA(Immidiate) + + if cpu.A != 0xFF { + t.Errorf("ORA immediate: got A=%d, want %d", cpu.A, 0xFF) + } + if cpu.getStatusZero() { + t.Error("ORA immediate: zero flag should be clear") + } + if !cpu.getStatusNegative() { + t.Error("ORA immediate: negative flag should be set") + } +} + +func TestCPU_ORA_Immediate_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x00 + cpu.Memory.WriteAbsolute(0x200, 0x00) + + cpu.ORA(Immidiate) + + if cpu.A != 0x00 { + t.Errorf("ORA immediate zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("ORA immediate zero: zero flag should be set") + } +} + +func TestCPU_ORA_Immediate_SetBits(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x01 + cpu.Memory.WriteAbsolute(0x200, 0x40) + + cpu.ORA(Immidiate) + + if cpu.A != 0x41 { + t.Errorf("ORA immediate setbits: got A=%d, want %d", cpu.A, 0x41) + } + if cpu.getStatusNegative() { + t.Error("ORA immediate setbits: negative flag should be clear") + } +} + +// ============================================================================= +// EOR - Exclusive OR +// ============================================================================= + +func TestCPU_EOR_Immediate(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xFF + cpu.Memory.WriteAbsolute(0x200, 0x0F) + + cpu.EOR(Immidiate) + + if cpu.A != 0xF0 { + t.Errorf("EOR immediate: got A=%d, want %d", cpu.A, 0xF0) + } + if !cpu.getStatusNegative() { + t.Error("EOR immediate: negative flag should be set") + } +} + +func TestCPU_EOR_Immediate_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x55 + cpu.Memory.WriteAbsolute(0x200, 0x55) + + cpu.EOR(Immidiate) + + if cpu.A != 0x00 { + t.Errorf("EOR immediate zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("EOR immediate zero: zero flag should be set") + } +} + +func TestCPU_EOR_Immediate_NoNegative(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x80 + cpu.Memory.WriteAbsolute(0x200, 0x80) + + cpu.EOR(Immidiate) + + if cpu.A != 0x00 { + t.Errorf("EOR immediate no neg: got A=%d, want %d", cpu.A, 0x00) + } + if cpu.getStatusNegative() { + t.Error("EOR immediate no neg: negative flag should be clear") + } +} + +// ============================================================================= +// CMP - Compare Accumulator +// ============================================================================= + +func TestCPU_CMP_Immediate_Equal(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x42 + cpu.Memory.WriteAbsolute(0x200, 0x42) + + cpu.CMP(Immidiate) + + if !cpu.getStatusZero() { + t.Error("CMP equal: zero flag should be set") + } + if !cpu.getStatusCarry() { + t.Error("CMP equal: carry flag should be set") + } + if cpu.getStatusNegative() { + t.Error("CMP equal: negative flag should be clear") + } +} + +func TestCPU_CMP_Immediate_Greater(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x50 + cpu.Memory.WriteAbsolute(0x200, 0x30) + + cpu.CMP(Immidiate) + + if cpu.getStatusZero() { + t.Error("CMP greater: zero flag should be clear") + } + if !cpu.getStatusCarry() { + t.Error("CMP greater: carry flag should be set") + } + if cpu.getStatusNegative() { + t.Error("CMP greater: negative flag should be clear") + } +} + +func TestCPU_CMP_Immediate_Less(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x10 + cpu.Memory.WriteAbsolute(0x200, 0x20) + + cpu.CMP(Immidiate) + + if cpu.getStatusZero() { + t.Error("CMP less: zero flag should be clear") + } + if cpu.getStatusCarry() { + t.Error("CMP less: carry flag should be clear") + } + if !cpu.getStatusNegative() { + t.Error("CMP less: negative flag should be set (result 0xF0)") + } +} + +// ============================================================================= +// CPX - Compare X Register +// ============================================================================= + +func TestCPU_CPX_Immediate_Equal(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0x42 + cpu.Memory.WriteAbsolute(0x200, 0x42) + + cpu.CPX(Immidiate) + + if !cpu.getStatusZero() { + t.Error("CPX equal: zero flag should be set") + } + if !cpu.getStatusCarry() { + t.Error("CPX equal: carry flag should be set") + } +} + +func TestCPU_CPX_Immediate_Greater(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0x50 + cpu.Memory.WriteAbsolute(0x200, 0x20) + + cpu.CPX(Immidiate) + + if cpu.getStatusZero() { + t.Error("CPX greater: zero flag should be clear") + } + if !cpu.getStatusCarry() { + t.Error("CPX greater: carry flag should be set") + } +} + +func TestCPU_CPX_Immediate_Less(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.X = 0x10 + cpu.Memory.WriteAbsolute(0x200, 0x30) + + cpu.CPX(Immidiate) + + if cpu.getStatusCarry() { + t.Error("CPX less: carry flag should be clear") + } + if !cpu.getStatusNegative() { + t.Error("CPX less: negative flag should be set") + } +} + +// ============================================================================= +// CPY - Compare Y Register +// ============================================================================= + +func TestCPU_CPY_Immediate_Equal(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0x42 + cpu.Memory.WriteAbsolute(0x200, 0x42) + + cpu.CPY(Immidiate) + + if !cpu.getStatusZero() { + t.Error("CPY equal: zero flag should be set") + } + if !cpu.getStatusCarry() { + t.Error("CPY equal: carry flag should be set") + } +} + +func TestCPU_CPY_Immediate_Greater(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0x60 + cpu.Memory.WriteAbsolute(0x200, 0x20) + + cpu.CPY(Immidiate) + + if cpu.getStatusZero() { + t.Error("CPY greater: zero flag should be clear") + } + if !cpu.getStatusCarry() { + t.Error("CPY greater: carry flag should be set") + } +} + +func TestCPU_CPY_Immediate_Less(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Y = 0x05 + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.CPY(Immidiate) + + if cpu.getStatusCarry() { + t.Error("CPY less: carry flag should be clear") + } + if !cpu.getStatusNegative() { + t.Error("CPY less: negative flag should be set") + } +} + +// ============================================================================= +// ADC - Add with Carry (keep existing tests) +// ============================================================================= + +func TestCPU_ADC_zeropage_noCarry(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 1000 + cpu.Memory.WriteAbsolute(1000, 100) + cpu.Memory.WriteZeroPage(100, 100) + + cpu.ADC(ZeroPage) + + if cpu.A != 100 { + t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 100) + } + if cpu.PC != 1001 { + t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1001) + } +} + +func TestCPU_ADC_zeropage_initialCarry(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 1000 + cpu.Memory.WriteAbsolute(1000, 100) + cpu.Memory.WriteZeroPage(100, 100) + cpu.setStatusCarry(true) + + cpu.ADC(ZeroPage) + + if cpu.A != 101 { + t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 101) + } + if cpu.getStatusCarry() { + t.Error("Carry flag should be cleared") + } + if cpu.PC != 1001 { + t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1001) + } + if cpu.getStatusZero() { + t.Errorf("Wrong Zero status flag value after ADC operation, got: %t, want: %t.", cpu.getStatusZero(), false) + } +} + +func TestCPU_ADC_zeropage_carryOver(t *testing.T) { + cpu := getTestCPU() + cpu.A = 255 + cpu.PC = 1000 + cpu.Memory.WriteAbsolute(1000, 100) + cpu.Memory.WriteZeroPage(100, 1) + cpu.setStatusCarry(false) + + cpu.ADC(ZeroPage) + + if cpu.A != 0 { + t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 0) + } + if !cpu.getStatusCarry() { + t.Error("Carry flag should be set") + } + if !cpu.getStatusZero() { + t.Error("Zero flag should be set") + } + if cpu.PC != 1001 { + t.Errorf("Wrong PC value after ADC operation, got: %d, want: %d.", cpu.PC, 1001) + } +} + +func TestCPU_ADC_zeropage_overflow_set(t *testing.T) { + cpu := getTestCPU() + cpu.A = 127 + cpu.PC = 1000 + cpu.Memory.WriteAbsolute(1000, 100) + cpu.Memory.WriteZeroPage(100, 1) + cpu.setStatusCarry(false) + + cpu.ADC(ZeroPage) + + if cpu.A != 128 { + t.Errorf("Wrong A register value after ADC operation, got: %d, want: %d.", cpu.A, 128) + } + if !cpu.getStatusOverflow() { + t.Error("Overflow flag should be set") + } +} + +// ============================================================================= +// SBC - Subtract with Carry (Borrow) +// ============================================================================= + +func TestCPU_SBC_Immediate_NoBorrow(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x50 + cpu.setStatusCarry(true) // carry set = no borrow + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.SBC(Immidiate) + + if cpu.A != 0x40 { + t.Errorf("SBC no borrow: got A=%d, want %d", cpu.A, 0x40) + } + if !cpu.getStatusCarry() { + t.Error("SBC no borrow: carry should be set (no borrow)") + } + if cpu.getStatusZero() { + t.Error("SBC no borrow: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("SBC no borrow: negative flag should be clear") + } +} + +func TestCPU_SBC_Immediate_WithBorrow(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x50 + cpu.setStatusCarry(false) // carry clear = borrow + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.SBC(Immidiate) + + if cpu.A != 0x3F { + t.Errorf("SBC with borrow: got A=%d, want %d", cpu.A, 0x3F) + } + if !cpu.getStatusCarry() { + t.Error("SBC with borrow: carry should be set (result >= 0)") + } +} + +func TestCPU_SBC_Immediate_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x50 + cpu.setStatusCarry(true) + cpu.Memory.WriteAbsolute(0x200, 0x50) + + cpu.SBC(Immidiate) + + if cpu.A != 0x00 { + t.Errorf("SBC zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("SBC zero: zero flag should be set") + } + if !cpu.getStatusCarry() { + t.Error("SBC zero: carry should be set") + } +} + +func TestCPU_SBC_Immediate_Underflow(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x10 + cpu.setStatusCarry(true) + cpu.Memory.WriteAbsolute(0x200, 0x20) + + cpu.SBC(Immidiate) + + if cpu.A != 0xF0 { + t.Errorf("SBC underflow: got A=%d, want %d", cpu.A, 0xF0) + } + if cpu.getStatusCarry() { + t.Error("SBC underflow: carry should be clear (borrow occurred)") + } + if !cpu.getStatusNegative() { + t.Error("SBC underflow: negative flag should be set") + } +} + +// ============================================================================= +// ASL - Arithmetic Shift Left +// ============================================================================= + +func TestCPU_ASL_Accumulator_Carry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x80 // bit 7 set + + cpu.ASL(Accumulator) + + if cpu.A != 0x00 { + t.Errorf("ASL acc carry: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusCarry() { + t.Error("ASL acc carry: carry flag should be set") + } + if !cpu.getStatusZero() { + t.Error("ASL acc carry: zero flag should be set") + } +} + +func TestCPU_ASL_Accumulator_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x7F // 0111_1111 + + cpu.ASL(Accumulator) + + if cpu.A != 0xFE { + t.Errorf("ASL acc neg: got A=%d, want %d", cpu.A, 0xFE) + } + if cpu.getStatusCarry() { + t.Error("ASL acc neg: carry flag should be clear") + } + if !cpu.getStatusNegative() { + t.Error("ASL acc neg: negative flag should be set") + } +} + +func TestCPU_ASL_ZeroPage(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) // zp addr + cpu.Memory.WriteZeroPage(0x50, 0x41) // value 0100_0001 + + cpu.ASL(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x82 { + t.Errorf("ASL zp: got mem=%d, want %d", val, 0x82) + } + if cpu.getStatusCarry() { + t.Error("ASL zp: carry should be clear") + } + if !cpu.getStatusNegative() { + t.Error("ASL zp: negative flag should be set") + } +} + +func TestCPU_ASL_ZeroPage_WithCarry(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0xC0) // 1100_0000 + + cpu.ASL(ZeroPage) + + val := cpu.Memory.ReadZeroPage(0x50) + if val != 0x80 { + t.Errorf("ASL zp carry: got mem=%d, want %d", val, 0x80) + } + if !cpu.getStatusCarry() { + t.Error("ASL zp carry: carry should be set") + } +} + +// ============================================================================= +// LSR - Logical Shift Right +// ============================================================================= + +func TestCPU_LSR_Accumulator(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x04 // 0000_0100 + + cpu.LSR(Accumulator) + + if cpu.A != 0x02 { + t.Errorf("LSR acc: got A=%d, want %d", cpu.A, 0x02) + } + if cpu.getStatusCarry() { + t.Error("LSR acc: carry should be clear") + } + if cpu.getStatusNegative() { + t.Error("LSR acc: negative flag should always be clear") + } +} + +func TestCPU_LSR_Accumulator_Carry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x01 // bit 0 set + + cpu.LSR(Accumulator) + + if cpu.A != 0x00 { + t.Errorf("LSR acc carry: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusCarry() { + t.Error("LSR acc carry: carry should be set") + } + if !cpu.getStatusZero() { + t.Error("LSR acc carry: zero flag should be set") + } +} + +func TestCPU_LSR_Accumulator_LargeValue(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0xFE // 1111_1110 + + cpu.LSR(Accumulator) + + if cpu.A != 0x7F { + t.Errorf("LSR acc large: got A=%d, want %d", cpu.A, 0x7F) + } + if cpu.getStatusCarry() { + t.Error("LSR acc large: carry should be clear") + } + if cpu.getStatusNegative() { + t.Error("LSR acc large: negative should be clear") + } +} + +// ============================================================================= +// ROL - Rotate Left +// ============================================================================= + +func TestCPU_ROL_Accumulator_NoCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x01 + cpu.setStatusCarry(false) + + cpu.ROL(Accumulator) + + if cpu.A != 0x02 { + t.Errorf("ROL acc no carry: got A=%d, want %d", cpu.A, 0x02) + } + if cpu.getStatusCarry() { + t.Error("ROL acc no carry: carry should be clear") + } +} + +func TestCPU_ROL_Accumulator_WithCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x01 + cpu.setStatusCarry(true) + + cpu.ROL(Accumulator) + + if cpu.A != 0x03 { + t.Errorf("ROL acc with carry: got A=%d, want %d", cpu.A, 0x03) + } + if cpu.getStatusCarry() { + t.Error("ROL acc with carry: carry should be clear") + } +} + +func TestCPU_ROL_Accumulator_Bit7ToCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x80 + cpu.setStatusCarry(false) + + cpu.ROL(Accumulator) + + if cpu.A != 0x00 { + t.Errorf("ROL acc bit7: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusCarry() { + t.Error("ROL acc bit7: carry should be set") + } + if !cpu.getStatusZero() { + t.Error("ROL acc bit7: zero should be set") + } +} + +// ============================================================================= +// ROR - Rotate Right +// ============================================================================= + +func TestCPU_ROR_Accumulator_NoCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x02 + cpu.setStatusCarry(false) + + cpu.ROR(Accumulator) + + if cpu.A != 0x01 { + t.Errorf("ROR acc no carry: got A=%d, want %d", cpu.A, 0x01) + } + if cpu.getStatusCarry() { + t.Error("ROR acc no carry: carry should be clear") + } +} + +func TestCPU_ROR_Accumulator_WithCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x02 + cpu.setStatusCarry(true) + + cpu.ROR(Accumulator) + + if cpu.A != 0x81 { + t.Errorf("ROR acc with carry: got A=%d, want %d", cpu.A, 0x81) + } + if cpu.getStatusCarry() { + t.Error("ROR acc with carry: carry should be clear") + } + if !cpu.getStatusNegative() { + t.Error("ROR acc with carry: negative should be set") + } +} + +func TestCPU_ROR_Accumulator_Bit0ToCarry(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x01 + cpu.setStatusCarry(false) + + cpu.ROR(Accumulator) + + if cpu.A != 0x00 { + t.Errorf("ROR acc bit0: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusCarry() { + t.Error("ROR acc bit0: carry should be set") + } + if !cpu.getStatusZero() { + t.Error("ROR acc bit0: zero should be set") + } +} + +// ============================================================================= +// JMP - Jump +// ============================================================================= + +func TestCPU_JMP_Absolute(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x00) // low byte + cpu.Memory.WriteAbsolute(0x201, 0x10) // high byte -> 0x1000 + + cpu.JMP(Absolute) + + if cpu.PC != 0x1000 { + t.Errorf("JMP absolute: got PC=%04x, want %04x", cpu.PC, 0x1000) + } +} + +func TestCPU_JMP_Absolute_LowAddress(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x50) // low byte + cpu.Memory.WriteAbsolute(0x201, 0x00) // high byte -> 0x0050 + + cpu.JMP(Absolute) + + if cpu.PC != 0x0050 { + t.Errorf("JMP absolute low: got PC=%04x, want %04x", cpu.PC, 0x0050) + } +} + +func TestCPU_JMP_Indirect(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + // Pointer at 0x200 -> address 0x0300 + cpu.Memory.WriteAbsolute(0x200, 0x00) // low byte of pointer + cpu.Memory.WriteAbsolute(0x201, 0x03) // high byte of pointer -> 0x0300 + // Value at 0x0300 -> target address 0x1234 + cpu.Memory.WriteAbsolute(0x0300, 0x34) // low byte of target + cpu.Memory.WriteAbsolute(0x0301, 0x12) // high byte of target + + cpu.JMP(Indirect) + + if cpu.PC != 0x1234 { + t.Errorf("JMP indirect: got PC=%04x, want %04x", cpu.PC, 0x1234) + } +} + +// ============================================================================= +// JSR/RTS - Subroutine Call/Return +// ============================================================================= + +func TestCPU_JSR_Basic(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.Memory.WriteAbsolute(0x200, 0x00) // low byte of target + cpu.Memory.WriteAbsolute(0x201, 0x10) // high byte -> 0x1000 + + cpu.JSR(Absolute) + + if cpu.PC != 0x1000 { + t.Errorf("JSR: got PC=%04x, want %04x", cpu.PC, 0x1000) + } +} + +func TestCPU_RTS_Basic(t *testing.T) { + cpu := getTestCPU() + cpu.stackPush(0x00) // hi byte + cpu.stackPush(0x64) // lo byte = 0x0064 + + cpu.RTS(Implied) + + // RTS adds 1 to the popped address + if cpu.PC != 0x0065 { + t.Errorf("RTS: got PC=%04x, want %04x", cpu.PC, 0x0065) + } +} + +func TestCPU_JSR_RTS_Roundtrip(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x300 + cpu.Memory.WriteAbsolute(0x300, 0x00) // low byte + cpu.Memory.WriteAbsolute(0x301, 0x10) // high byte -> 0x1000 + + cpu.JSR(Absolute) + + if cpu.PC != 0x1000 { + t.Errorf("JSR roundtrip: got PC=%04x, want %04x", cpu.PC, 0x1000) + } + + // Now RTS should return to 0x302 (the byte after JSR's last operand byte + 1) + cpu.RTS(Implied) + + if cpu.PC != 0x302 { + t.Errorf("RTS roundtrip: got PC=%04x, want %04x", cpu.PC, 0x302) + } +} + +// ============================================================================= +// BNE - Branch if Not Equal (Z=0) +// ============================================================================= + +func TestCPU_BNE_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusZero(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) // offset +16 + + cpu.BNE(Relative) + + // PC increments to 0x201 then adds offset 0x10 = 0x211 + if cpu.PC != 0x211 { + t.Errorf("BNE taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BNE_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusZero(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BNE(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BNE not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +func TestCPU_BNE_Backward(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x210 + cpu.setStatusZero(false) + cpu.Memory.WriteAbsolute(0x210, 0xFB) // -5 in two's complement + + cpu.BNE(Relative) + + // PC goes to 0x211, then -5 = 0x20C + if cpu.PC != 0x020C { + t.Errorf("BNE backward: got PC=%04x, want %04x", cpu.PC, 0x020C) + } +} + +// ============================================================================= +// BEQ - Branch if Equal (Z=1) +// ============================================================================= + +func TestCPU_BEQ_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusZero(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BEQ(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BEQ taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BEQ_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusZero(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BEQ(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BEQ not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BCS - Branch if Carry Set (C=1) +// ============================================================================= + +func TestCPU_BCS_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusCarry(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BCS(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BCS taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BCS_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusCarry(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BCS(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BCS not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BCC - Branch if Carry Clear (C=0) +// ============================================================================= + +func TestCPU_BCC_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusCarry(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BCC(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BCC taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BCC_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusCarry(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BCC(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BCC not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BPL - Branch if Plus (N=0) +// ============================================================================= + +func TestCPU_BPL_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusNegative(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BPL(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BPL taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BPL_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusNegative(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BPL(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BPL not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BMI - Branch if Minus (N=1) +// ============================================================================= + +func TestCPU_BMI_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusNegative(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BMI(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BMI taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BMI_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusNegative(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BMI(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BMI not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BVC - Branch if Overflow Clear (V=0) +// ============================================================================= + +func TestCPU_BVC_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusOverflow(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BVC(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BVC taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BVC_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusOverflow(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BVC(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BVC not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// BVS - Branch if Overflow Set (V=1) +// ============================================================================= + +func TestCPU_BVS_Taken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusOverflow(true) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BVS(Relative) + + if cpu.PC != 0x211 { + t.Errorf("BVS taken: got PC=%04x, want %04x", cpu.PC, 0x211) + } +} + +func TestCPU_BVS_NotTaken(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.setStatusOverflow(false) + cpu.Memory.WriteAbsolute(0x200, 0x10) + + cpu.BVS(Relative) + + if cpu.PC != 0x201 { + t.Errorf("BVS not taken: got PC=%04x, want %04x", cpu.PC, 0x201) + } +} + +// ============================================================================= +// SEC - Set Carry Flag +// ============================================================================= + +func TestCPU_SEC(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusCarry(false) + + cpu.SEC(Implied) + + if !cpu.getStatusCarry() { + t.Error("SEC: carry flag should be set") + } +} + +// ============================================================================= +// CLC - Clear Carry Flag +// ============================================================================= + +func TestCPU_CLC(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusCarry(true) + + cpu.CLC(Implied) + + if cpu.getStatusCarry() { + t.Error("CLC: carry flag should be clear") + } +} + +// ============================================================================= +// SED - Set Decimal Flag +// ============================================================================= + +func TestCPU_SED(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusDecimal(false) + + cpu.SED(Implied) + + if !cpu.getStatusDecimal() { + t.Error("SED: decimal flag should be set") + } +} + +// ============================================================================= +// CLD - Clear Decimal Flag +// ============================================================================= + +func TestCPU_CLD(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusDecimal(true) + + cpu.CLD(Implied) + + if cpu.getStatusDecimal() { + t.Error("CLD: decimal flag should be clear") + } +} + +// ============================================================================= +// SEI - Set Interrupt Disable +// ============================================================================= + +func TestCPU_SEI(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusIRQ(false) + + cpu.SEI(Implied) + + if !cpu.getStatusIRQ() { + t.Error("SEI: IRQ disable flag should be set") + } +} + +// ============================================================================= +// CLI - Clear Interrupt Disable +// ============================================================================= + +func TestCPU_CLI(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusIRQ(true) + + cpu.CLI(Implied) + + if cpu.getStatusIRQ() { + t.Error("CLI: IRQ disable flag should be clear") + } +} + +// ============================================================================= +// CLV - Clear Overflow Flag +// ============================================================================= + +func TestCPU_CLV(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusOverflow(true) + + cpu.CLV(Implied) + + if cpu.getStatusOverflow() { + t.Error("CLV: overflow flag should be clear") + } +} + +// ============================================================================= +// PHA - Push Accumulator +// ============================================================================= + +func TestCPU_PHA(t *testing.T) { + cpu := getTestCPU() + cpu.A = 0x42 + initialSP := cpu.SP + + cpu.PHA(Implied) + + if cpu.SP != initialSP-1 { + t.Errorf("PHA: got SP=%d, want %d", cpu.SP, initialSP-1) + } + // Read the value from the stack + val := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP)) + if val != 0x42 { + t.Errorf("PHA: got stack value=%d, want %d", val, 0x42) + } +} + +// ============================================================================= +// PLA - Pull Accumulator +// ============================================================================= + +func TestCPU_PLA_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.stackPush(0x42) + + cpu.PLA(Implied) + + if cpu.A != 0x42 { + t.Errorf("PLA: got A=%d, want %d", cpu.A, 0x42) + } + if cpu.getStatusZero() { + t.Error("PLA: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("PLA: negative flag should be clear") + } +} + +func TestCPU_PLA_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.stackPush(0x00) + + cpu.PLA(Implied) + + if cpu.A != 0x00 { + t.Errorf("PLA zero: got A=%d, want %d", cpu.A, 0x00) + } + if !cpu.getStatusZero() { + t.Error("PLA zero: zero flag should be set") + } +} + +func TestCPU_PLA_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.stackPush(0x80) + + cpu.PLA(Implied) + + if cpu.A != 0x80 { + t.Errorf("PLA neg: got A=%d, want %d", cpu.A, 0x80) + } + if !cpu.getStatusNegative() { + t.Error("PLA neg: negative flag should be set") + } +} + +// ============================================================================= +// PHP - Push Processor Status +// ============================================================================= + +func TestCPU_PHP(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusCarry(true) + cpu.setStatusZero(true) + initialSP := cpu.SP + + cpu.PHP(Implied) + + if cpu.SP != initialSP-1 { + t.Errorf("PHP: got SP=%d, want %d", cpu.SP, initialSP-1) + } + val := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP)) + if val != cpu.S { + t.Errorf("PHP: got stack value=%02x, want %02x", val, cpu.S) + } +} + +// ============================================================================= +// PLP - Pull Processor Status +// ============================================================================= + +func TestCPU_PLP(t *testing.T) { + cpu := getTestCPU() + // Push a known status value: carry=1, zero=1, negative=1 = 0x83 + BRK(0x10) + bit5(0x20) = 0xB3 + cpu.stackPush(0x83) + + cpu.PLP(Implied) + + // PLP restores status with B flag forced set and bit 5 forced set + if !cpu.getStatusCarry() { + t.Error("PLP: carry flag should be set") + } + if !cpu.getStatusZero() { + t.Error("PLP: zero flag should be set") + } + if !cpu.getStatusNegative() { + t.Error("PLP: negative flag should be set") + } +} + +func TestCPU_PLP_ClearFlags(t *testing.T) { + cpu := getTestCPU() + cpu.setStatusCarry(true) + cpu.setStatusZero(true) + cpu.setStatusNegative(true) + // Push status with no flags set + cpu.stackPush(0x00) + + cpu.PLP(Implied) + + if cpu.getStatusCarry() { + t.Error("PLP clear: carry flag should be clear") + } + if cpu.getStatusZero() { + t.Error("PLP clear: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("PLP clear: negative flag should be clear") + } +} + +// ============================================================================= +// TSX - Transfer Stack Pointer to X +// ============================================================================= + +func TestCPU_TSX_Normal(t *testing.T) { + cpu := getTestCPU() + cpu.SP = 0x42 + + cpu.TSX(Implied) + + if cpu.X != 0x42 { + t.Errorf("TSX: got X=%d, want %d", cpu.X, 0x42) + } + if cpu.getStatusZero() { + t.Error("TSX: zero flag should be clear") + } + if cpu.getStatusNegative() { + t.Error("TSX: negative flag should be clear") + } +} + +func TestCPU_TSX_Negative(t *testing.T) { + cpu := getTestCPU() + cpu.SP = 0xFF + + cpu.TSX(Implied) + + if cpu.X != 0xFF { + t.Errorf("TSX negative: got X=%d, want %d", cpu.X, 0xFF) + } + if !cpu.getStatusNegative() { + t.Error("TSX negative: negative flag should be set") + } +} + +func TestCPU_TSX_Zero(t *testing.T) { + cpu := getTestCPU() + cpu.SP = 0x00 + + cpu.TSX(Implied) + + if cpu.X != 0x00 { + t.Errorf("TSX zero: got X=%d, want %d", cpu.X, 0x00) + } + if !cpu.getStatusZero() { + t.Error("TSX zero: zero flag should be set") + } +} + +// ============================================================================= +// TXS - Transfer X to Stack Pointer +// ============================================================================= + +func TestCPU_TXS(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x42 + + cpu.TXS(Implied) + + if cpu.SP != 0x42 { + t.Errorf("TXS: got SP=%d, want %d", cpu.SP, 0x42) + } +} + +func TestCPU_TXS_NoFlags(t *testing.T) { + cpu := getTestCPU() + cpu.X = 0x00 + cpu.setStatusZero(false) + cpu.setStatusNegative(false) + + cpu.TXS(Implied) + + if cpu.SP != 0x00 { + t.Errorf("TXS no flags: got SP=%d, want %d", cpu.SP, 0x00) + } + // TXS does NOT affect flags + if cpu.getStatusZero() { + t.Error("TXS no flags: zero flag should remain clear (TXS doesn't affect flags)") + } +} + +// ============================================================================= +// BIT - Test Bits in Memory +// ============================================================================= + +func TestCPU_BIT_ZeroResult(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x0F + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x80) // A & M = 0x0F & 0x80 = 0x00, bit7=1, bit6=0 + + cpu.BIT(ZeroPage) + + if !cpu.getStatusZero() { + t.Error("BIT zero: zero flag should be set") + } + if !cpu.getStatusNegative() { + t.Error("BIT zero: negative flag should be set (bit 7 of M)") + } + if cpu.getStatusOverflow() { + t.Error("BIT zero: overflow flag should be clear (bit 6 of M is 0)") + } +} + +func TestCPU_BIT_NonZeroResult(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0xFF + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0x40) // bit 6 set + + cpu.BIT(ZeroPage) + + if cpu.getStatusZero() { + t.Error("BIT nonzero: zero flag should be clear (A & M = 0x40)") + } + if cpu.getStatusNegative() { + t.Error("BIT nonzero: negative flag should be clear (bit 7 of M is 0)") + } + if !cpu.getStatusOverflow() { + t.Error("BIT nonzero: overflow flag should be set (bit 6 of M)") + } +} + +func TestCPU_BIT_AllFlags(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x00 + cpu.Memory.WriteAbsolute(0x200, 0x50) + cpu.Memory.WriteZeroPage(0x50, 0xC0) // bits 7 and 6 set + + cpu.BIT(ZeroPage) + + if !cpu.getStatusZero() { + t.Error("BIT all: zero flag should be set (A=0)") + } + if !cpu.getStatusNegative() { + t.Error("BIT all: negative flag should be set (bit 7 of M)") + } + if !cpu.getStatusOverflow() { + t.Error("BIT all: overflow flag should be set (bit 6 of M)") + } +} + +// ============================================================================= +// NOP - No Operation +// ============================================================================= + +func TestCPU_NOP(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + cpu.A = 0x42 + cpu.X = 0x10 + cpu.Y = 0x20 + + cpu.NOP(Implied) + + if cpu.PC != 0x200 { + t.Errorf("NOP: PC should not change, got %04x", cpu.PC) + } + if cpu.A != 0x42 { + t.Errorf("NOP: A should not change, got %d", cpu.A) + } + if cpu.X != 0x10 { + t.Errorf("NOP: X should not change, got %d", cpu.X) + } + if cpu.Y != 0x20 { + t.Errorf("NOP: Y should not change, got %d", cpu.Y) + } +} + +// ============================================================================= +// BRK - Break +// ============================================================================= + +func TestCPU_BRK(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x200 + + initialSP := cpu.SP + initialS := cpu.S + + cpu.BRK(Implied) + + // SP should have decreased by 3 (pushed PC hi, PC lo, status) + if cpu.SP != initialSP-3 { + t.Errorf("BRK: got SP=%d, want %d", cpu.SP, initialSP-3) + } + // IRQ disable flag should be set + if !cpu.getStatusIRQ() { + t.Error("BRK: IRQ flag should be set") + } + // BRK flag should be set + if !cpu.getStatusBRK() { + t.Error("BRK: BRK flag should be set") + } + + // Verify pushed values on stack: status was pushed after PC + // Stack grows down; values at SP_LOW + initialSP, initialSP-1, initialSP-2 + // BRK pushes: PC+1 hi, PC+1 lo, status + pushedPCHi := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP)) + pushedPCLo := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP-1)) + pushedStatus := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP-2)) + + // PC+1 = 0x201 + expectedPC := uint16(0x201) + gotPC := uint16(pushedPCLo) | (uint16(pushedPCHi) << 8) + if gotPC != expectedPC { + t.Errorf("BRK pushed PC: got %04x, want %04x", gotPC, expectedPC) + } + + // Status pushed should be the original status with BRK cleared (as per implementation) + _ = pushedStatus + _ = initialS +} + +func TestCPU_BRK_PushesCorrectPC(t *testing.T) { + cpu := getTestCPU() + cpu.PC = 0x0305 + initialSP := cpu.SP + + cpu.BRK(Implied) + + // BRK pushes PC+1 = 0x0306 to stack (hi byte first, then lo byte) + pushedPCHi := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP)) + pushedPCLo := cpu.Memory.ReadAbsolute(cpu.SP_LOW + uint16(initialSP-1)) + + pushedPC := uint16(pushedPCLo) | (uint16(pushedPCHi) << 8) + if pushedPC != 0x0306 { + t.Errorf("BRK pushed PC: got %04x, want %04x", pushedPC, 0x0306) + } +} + +// ============================================================================= +// RTI - Return from Interrupt +// ============================================================================= + +func TestCPU_RTI(t *testing.T) { + cpu := getTestCPU() + // Push PC hi, PC lo, then status (in BRK order) + // RTI pops in order: status, PC lo, PC hi + cpu.stackPush(0x10) // PC hi byte + cpu.stackPush(0x00) // PC lo byte -> 0x1000 + cpu.stackPush(0x01) // status (carry set) + + cpu.RTI(Implied) + + if cpu.PC != 0x1000 { + t.Errorf("RTI: got PC=%04x, want %04x", cpu.PC, 0x1000) + } + if !cpu.getStatusCarry() { + t.Error("RTI: carry flag should be restored") + } +} + +func TestCPU_RTI_RestoresFlags(t *testing.T) { + cpu := getTestCPU() + // Push state: PC=0x0400, status with negative and carry + cpu.stackPush(0x04) // PC hi + cpu.stackPush(0x00) // PC lo -> 0x0400 + cpu.stackPush(0x81) // status: negative(0x80) + carry(0x01) + + cpu.RTI(Implied) + + if cpu.PC != 0x0400 { + t.Errorf("RTI flags: got PC=%04x, want %04x", cpu.PC, 0x0400) + } + if !cpu.getStatusNegative() { + t.Error("RTI flags: negative flag should be restored") + } + if !cpu.getStatusCarry() { + t.Error("RTI flags: carry flag should be restored") + } } diff --git a/MOS6510/cpu_stack_test.go b/MOS6510/cpu_stack_test.go index adf5348..0fb1f27 100644 --- a/MOS6510/cpu_stack_test.go +++ b/MOS6510/cpu_stack_test.go @@ -20,51 +20,110 @@ func TestCPU_stackPush_happypath(t *testing.T) { } } -func TestCPU_stackPush_overflow(t *testing.T) { +func TestCPU_stackPush_multipleValues(t *testing.T) { // Arrange memory := RAM.NewMemory(nil) cpu := NewCPU(&memory) // Act + cpu.stackPush(10) + cpu.stackPush(20) + cpu.stackPush(30) + + // Assert + if cpu.SP != 0xFC { + t.Errorf("Stack pointer value was incorrect, got: %d, want: %d.", cpu.SP, 0xFC) + } +} + +func TestCPU_stackPush_wraps_around(t *testing.T) { + // The real 6502 stack wraps around (no error), test that behavior + memory := RAM.NewMemory(nil) + cpu := NewCPU(&memory) + + // Push 255 times to wrap SP from 0xFF back to 0xFF for i := 0; i < 255; i++ { cpu.stackPush(100) } - err := cpu.stackPush(100) + // SP should have wrapped around to 0x00 + if cpu.SP != 0x00 { + t.Errorf("Stack pointer value was incorrect after 255 pushes, got: %x, want: %x.", cpu.SP, 0x00) + } - // Assert - if err == nil { - t.Error("Expected a stackoverflow error, got nothing.") + // One more push wraps to 0xFF + cpu.stackPush(100) + if cpu.SP != 0xFF { + t.Errorf("Stack pointer value was incorrect after 256 pushes, got: %x, want: %x.", cpu.SP, 0xFF) } } -func TestCPU_stackPop_underflow(t *testing.T) { +func TestCPU_stackPop_happypath(t *testing.T) { // Arrange memory := RAM.NewMemory(nil) cpu := NewCPU(&memory) cpu.stackPush(100) // Act - cpu.stackPop() - _, err := cpu.stackPop() + result, _ := cpu.stackPop() // Assert - if err == nil { - t.Error("Expected a stack underflow error, got nothing.") + if result != 100 { + t.Errorf("Stack value was incorrect, got: %d, want: %d.", result, 100) } } -func TestCPU_stackPop_happypath(t *testing.T) { +func TestCPU_stackPop_LIFO_order(t *testing.T) { + // Arrange + memory := RAM.NewMemory(nil) + cpu := NewCPU(&memory) + cpu.stackPush(10) + cpu.stackPush(20) + cpu.stackPush(30) + + // Act & Assert - should come back in reverse order + result, _ := cpu.stackPop() + if result != 30 { + t.Errorf("First pop value was incorrect, got: %d, want: %d.", result, 30) + } + + result, _ = cpu.stackPop() + if result != 20 { + t.Errorf("Second pop value was incorrect, got: %d, want: %d.", result, 20) + } + + result, _ = cpu.stackPop() + if result != 10 { + t.Errorf("Third pop value was incorrect, got: %d, want: %d.", result, 10) + } +} + +func TestCPU_stackPop_restores_SP(t *testing.T) { // Arrange memory := RAM.NewMemory(nil) cpu := NewCPU(&memory) cpu.stackPush(100) // Act - result, _ := cpu.stackPop() + cpu.stackPop() // Assert - if result != 100 { - t.Errorf("Stack value was incorrect, got: %d, want: %d.", result, 100) + if cpu.SP != 0xFF { + t.Errorf("Stack pointer not restored, got: %x, want: %x.", cpu.SP, 0xFF) + } +} + +func TestCPU_stack_uses_correct_address_range(t *testing.T) { + // The 6502 stack lives at 0x0100-0x01FF + memory := RAM.NewMemory(nil) + cpu := NewCPU(&memory) + + // Push a value - should go to 0x01FF (SP_LOW + SP) + cpu.stackPush(42) + + // Read from the expected memory location + val := memory.ReadAbsolute(0x01FF) + if val != 42 { + t.Errorf("Stack value not at correct memory address, got: %d, want: %d.", val, 42) } } diff --git a/MOS6510/cpu_status_test.go b/MOS6510/cpu_status_test.go index d063073..9359667 100644 --- a/MOS6510/cpu_status_test.go +++ b/MOS6510/cpu_status_test.go @@ -6,6 +6,7 @@ import ( func TestCPU_statusCarry(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 // reset S for isolated flag testing cpu.setStatusCarry(true) @@ -14,12 +15,13 @@ func TestCPU_statusCarry(t *testing.T) { } if cpu.S != 1 { - t.Error("Possible side effect on Carry set!") + t.Errorf("Possible side effect on Carry set! got: %d, want: %d", cpu.S, 1) } } func TestCPU_statusNegative(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusNegative(true) @@ -28,12 +30,13 @@ func TestCPU_statusNegative(t *testing.T) { } if cpu.S != 128 { - t.Error("Possible side effect on Negative set!") + t.Errorf("Possible side effect on Negative set! got: %d, want: %d", cpu.S, 128) } } func TestCPU_statusZero(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusZero(true) @@ -42,12 +45,13 @@ func TestCPU_statusZero(t *testing.T) { } if cpu.S != 2 { - t.Error("Possible side effect on Zero set!") + t.Errorf("Possible side effect on Zero set! got: %d, want: %d", cpu.S, 2) } } func TestCPU_statusIRQ(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusIRQ(true) @@ -56,12 +60,13 @@ func TestCPU_statusIRQ(t *testing.T) { } if cpu.S != 4 { - t.Error("Possible side effect on IRQ set!") + t.Errorf("Possible side effect on IRQ set! got: %d, want: %d", cpu.S, 4) } } func TestCPU_statusDecimal(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusDecimal(true) @@ -70,12 +75,13 @@ func TestCPU_statusDecimal(t *testing.T) { } if cpu.S != 8 { - t.Error("Possible side effect on Decimal set!") + t.Errorf("Possible side effect on Decimal set! got: %d, want: %d", cpu.S, 8) } } func TestCPU_statusBRK(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusBRK(true) @@ -84,12 +90,13 @@ func TestCPU_statusBRK(t *testing.T) { } if cpu.S != 16 { - t.Error("Possible side effect on BRK set!") + t.Errorf("Possible side effect on BRK set! got: %d, want: %d", cpu.S, 16) } } func TestCPU_statusOverflow(t *testing.T) { cpu := getTestCPU() + cpu.S = 0 cpu.setStatusOverflow(true) @@ -98,6 +105,50 @@ func TestCPU_statusOverflow(t *testing.T) { } if cpu.S != 64 { - t.Error("Possible side effect on Overflow set!") + t.Errorf("Possible side effect on Overflow set! got: %d, want: %d", cpu.S, 64) + } +} + +func TestCPU_statusCarry_clear(t *testing.T) { + cpu := getTestCPU() + cpu.S = 0xFF + + cpu.setStatusCarry(false) + + if cpu.getStatusCarry() { + t.Error("Carry flag should be cleared!") + } +} + +func TestCPU_statusNegative_clear(t *testing.T) { + cpu := getTestCPU() + cpu.S = 0xFF + + cpu.setStatusNegative(false) + + if cpu.getStatusNegative() { + t.Error("Negative flag should be cleared!") + } +} + +func TestCPU_statusZero_clear(t *testing.T) { + cpu := getTestCPU() + cpu.S = 0xFF + + cpu.setStatusZero(false) + + if cpu.getStatusZero() { + t.Error("Zero flag should be cleared!") + } +} + +func TestCPU_statusOverflow_clear(t *testing.T) { + cpu := getTestCPU() + cpu.S = 0xFF + + cpu.setStatusOverflow(false) + + if cpu.getStatusOverflow() { + t.Error("Overflow flag should be cleared!") } } diff --git a/RAM/memory.go b/RAM/memory.go index d9df6f5..f7abe51 100644 --- a/RAM/memory.go +++ b/RAM/memory.go @@ -2,7 +2,7 @@ package RAM import ( "fmt" - "io/ioutil" + "io" "log" "os" @@ -234,7 +234,7 @@ func (m *Memory) LoadROM(path string, address uint16) { fmt.Printf("Error! Can't open file %s", path) } - byteContent, err := ioutil.ReadAll(file) + byteContent, err := io.ReadAll(file) if err != nil { log.Fatal(err) } diff --git a/RAM/memory_test.go b/RAM/memory_test.go new file mode 100644 index 0000000..e873fe6 --- /dev/null +++ b/RAM/memory_test.go @@ -0,0 +1,342 @@ +package RAM + +import ( + "testing" + + "github.com/santatamas/go-c64/CIA" +) + +func TestNewMemory_Creates64KBMemory(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + if len(mem.memory_ram) != MemSize { + t.Errorf("Expected RAM size %d, got %d", MemSize, len(mem.memory_ram)) + } + if len(mem.memory_rom) != MemSize { + t.Errorf("Expected ROM size %d, got %d", MemSize, len(mem.memory_rom)) + } +} + +func TestWriteAbsolute_ReadAbsolute_Roundtrip(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Write to a RAM-only area (below 0xA000) + mem.WriteAbsolute(0x0800, 0x42) + result := mem.ReadAbsolute(0x0800) + + if result != 0x42 { + t.Errorf("Expected 0x42, got 0x%02X", result) + } +} + +func TestWriteAbsolute_ReadAbsolute_MultipleAddresses(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + addresses := []uint16{0x0000, 0x00FF, 0x0100, 0x0800, 0x4000, 0x8000} + for _, addr := range addresses { + mem.WriteAbsolute(addr, byte(addr&0xFF)) + result := mem.ReadAbsolute(addr) + if result != byte(addr&0xFF) { + t.Errorf("At address 0x%04X: expected 0x%02X, got 0x%02X", addr, byte(addr&0xFF), result) + } + } +} + +func TestWriteZeroPage_ReadZeroPage_Roundtrip(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.WriteZeroPage(0x10, 0xAB) + result := mem.ReadZeroPage(0x10) + + if result != 0xAB { + t.Errorf("Expected 0xAB, got 0x%02X", result) + } +} + +func TestWriteZeroPage_ReadZeroPage_MultipleAddresses(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + for i := byte(2); i < 0x10; i++ { + mem.WriteZeroPage(i, i*2) + result := mem.ReadZeroPage(i) + if result != i*2 { + t.Errorf("At zero page address 0x%02X: expected 0x%02X, got 0x%02X", i, i*2, result) + } + } +} + +func TestWriteZeroPage_Address0x01_TriggersBankSetup(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Writing to address 0x01 should call SetupBanks + // Reset CHARENG bank to RAM manually to test that SetupBanks changes it + mem.banks[CHARENG] = RAM + + // Write CHAREN | LORAM to address 0x01 - should trigger SetupBanks + // and set CHARENG to IO + mem.WriteZeroPage(AddrMemoryLayout, CHAREN|LORAM) + + if mem.banks[CHARENG] != IO { + t.Errorf("Expected CHARENG bank to be IO after writing CHAREN|LORAM to 0x01, got %d", mem.banks[CHARENG]) + } + + // Verify the memory layout byte was updated + if mem.memory_ram[AddrMemoryLayout] != CHAREN|LORAM { + t.Errorf("Expected memory[0x0001] to be %d, got %d", CHAREN|LORAM, mem.memory_ram[AddrMemoryLayout]) + } +} + +func TestSetupBanks_HIRAM_SetsKernalToROM(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Reset banks + for i := 0; i < len(mem.banks); i++ { + mem.banks[i] = RAM + } + + mem.SetupBanks(HIRAM) + + if mem.banks[KERNAL] != ROM { + t.Errorf("Expected KERNAL bank to be ROM when HIRAM set, got %d", mem.banks[KERNAL]) + } +} + +func TestSetupBanks_LORAM_HIRAM_SetsBasicToROM(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Reset banks + for i := 0; i < len(mem.banks); i++ { + mem.banks[i] = RAM + } + + mem.SetupBanks(LORAM | HIRAM) + + if mem.banks[BASIC] != ROM { + t.Errorf("Expected BASIC bank to be ROM when LORAM|HIRAM set, got %d", mem.banks[BASIC]) + } +} + +func TestSetupBanks_LORAM_Only_DoesNotSetBasicToROM(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Reset banks + for i := 0; i < len(mem.banks); i++ { + mem.banks[i] = RAM + } + + mem.SetupBanks(LORAM) + + if mem.banks[BASIC] == ROM { + t.Errorf("BASIC bank should not be ROM with only LORAM set") + } +} + +func TestSetupBanks_CHAREN_WithLORAM_SetsIOMode(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.SetupBanks(CHAREN | LORAM) + + if mem.banks[CHARENG] != IO { + t.Errorf("Expected CHARENG bank to be IO when CHAREN and LORAM set, got %d", mem.banks[CHARENG]) + } +} + +func TestSetupBanks_CHAREN_WithHIRAM_SetsIOMode(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.SetupBanks(CHAREN | HIRAM) + + if mem.banks[CHARENG] != IO { + t.Errorf("Expected CHARENG bank to be IO when CHAREN and HIRAM set, got %d", mem.banks[CHARENG]) + } +} + +func TestSetupBanks_NoCharenWithLORAM_SetsROMMode(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.SetupBanks(LORAM) + + if mem.banks[CHARENG] != ROM { + t.Errorf("Expected CHARENG bank to be ROM when CHAREN not set and LORAM set, got %d", mem.banks[CHARENG]) + } +} + +func TestSetupBanks_CHAREN_NoLORAM_NoHIRAM_SetsRAMMode(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.SetupBanks(CHAREN) + + if mem.banks[CHARENG] != RAM { + t.Errorf("Expected CHARENG bank to be RAM when CHAREN set but LORAM/HIRAM clear, got %d", mem.banks[CHARENG]) + } +} + +func TestReadAbsolute_KernalROM_WhenHIRAMSet(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Write different values to ROM and RAM at kernal address + mem.memory_rom[0xE000] = 0xAA + mem.memory_ram[0xE000] = 0xBB + + // With HIRAM set, KERNAL should be ROM + mem.SetupBanks(HIRAM | CHAREN) + + result := mem.ReadAbsolute(0xE000) + if result != 0xAA { + t.Errorf("Expected ROM value 0xAA, got 0x%02X (should read from ROM when HIRAM set)", result) + } +} + +func TestReadAbsolute_KernalRAM_WhenHIRAMClear(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Reset all banks to RAM + for i := 0; i < len(mem.banks); i++ { + mem.banks[i] = RAM + } + + mem.memory_rom[0xE000] = 0xAA + mem.memory_ram[0xE000] = 0xBB + + result := mem.ReadAbsolute(0xE000) + if result != 0xBB { + t.Errorf("Expected RAM value 0xBB, got 0x%02X (should read from RAM when HIRAM clear)", result) + } +} + +func TestReadAbsolute_BasicROM_WhenLORAMAndHIRAMSet(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.memory_rom[0xA000] = 0xCC + mem.memory_ram[0xA000] = 0xDD + + mem.SetupBanks(LORAM | HIRAM | CHAREN) + + result := mem.ReadAbsolute(0xA000) + if result != 0xCC { + t.Errorf("Expected ROM value 0xCC, got 0x%02X (should read from BASIC ROM when LORAM|HIRAM set)", result) + } +} + +func TestReadAbsolute_CharacterROM_WhenIONotSet(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.memory_rom[0xD000] = 0xEE + mem.memory_ram[0xD000] = 0xFF + + // CHAREN clear, LORAM set -> CHARENG bank = ROM + mem.SetupBanks(LORAM) + + result := mem.ReadAbsolute(0xD000) + if result != 0xEE { + t.Errorf("Expected ROM value 0xEE, got 0x%02X (should read character ROM when CHAREN clear)", result) + } +} + +func TestReadAbsolute_IOArea_WhenCharenSet(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.memory_ram[0xD000] = 0x77 + + // CHAREN + LORAM/HIRAM -> IO mode for char area + mem.SetupBanks(CHAREN | LORAM | HIRAM) + + result := mem.ReadAbsolute(0xD000) + if result != 0x77 { + t.Errorf("Expected RAM/IO value 0x77, got 0x%02X", result) + } +} + +func TestReadAbsolute_CIA_PortB_RoutesToCIA(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Set up for IO mode (default bank config) + mem.SetupBanks(LORAM | HIRAM | CHAREN) + + // Set a key in CIA so ReadRegister returns non-zero + cia.SetKey(0, 0) + cia.WriteRegister(0xFE) // Enable row 0 + + result := mem.ReadAbsolute(CIA_PORT_B) + + // When reading CIA_PORT_B in IO mode, it should route to CIA.Read + // CIA.Read calls ReadRegister which returns keyboard scan result + if result == 0 { + // With key set at row 0 col 0, and PORT_A = 0xFE (bit 0 clear), + // the result should be non-zero + t.Errorf("Expected non-zero CIA read result, got 0x%02X", result) + } +} + +func TestWriteAbsolute_CIA_PortA_RoutesToCIA(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Set up for IO mode + mem.SetupBanks(LORAM | HIRAM | CHAREN) + + // Write to CIA_PORT_A should route to CIA.Write + mem.WriteAbsolute(CIA_PORT_A, 0xFD) + + // CIA.Write calls WriteRegister which sets PORT_A + if cia.PORT_A != 0xFD { + t.Errorf("Expected CIA PORT_A to be 0xFD, got 0x%02X", cia.PORT_A) + } +} + +func TestReadAll_ReturnsROMContent(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + mem.memory_rom[0x0000] = 0x11 + mem.memory_rom[0xFFFF] = 0x22 + + romContent := mem.ReadAll() + if len(romContent) != MemSize { + t.Errorf("Expected ROM content length %d, got %d", MemSize, len(romContent)) + } + if romContent[0x0000] != 0x11 { + t.Errorf("Expected ROM[0x0000] = 0x11, got 0x%02X", romContent[0x0000]) + } + if romContent[0xFFFF] != 0x22 { + t.Errorf("Expected ROM[0xFFFF] = 0x22, got 0x%02X", romContent[0xFFFF]) + } +} + +func TestNewMemory_DefaultBankConfig(t *testing.T) { + cia := CIA.NewCIA(nil) + mem := NewMemory(&cia) + + // Default setup is LORAM|HIRAM|CHAREN + // KERNAL should be ROM + if mem.banks[KERNAL] != ROM { + t.Errorf("Expected default KERNAL bank to be ROM, got %d", mem.banks[KERNAL]) + } + // BASIC should be ROM + if mem.banks[BASIC] != ROM { + t.Errorf("Expected default BASIC bank to be ROM, got %d", mem.banks[BASIC]) + } + // CHARENG should be IO + if mem.banks[CHARENG] != IO { + t.Errorf("Expected default CHARENG bank to be IO, got %d", mem.banks[CHARENG]) + } +} diff --git a/README.md b/README.md index 938065f..5a23812 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,286 @@ -# Commodore 64 emulator written in Go -A functional (albeit not feature complete) Commodore64 emulator, running in your terminal. -This software comes as-is, and it's not meant to be production-ready. Use it at your own risk! +# Commodore 64 Emulator in Go -### Requirements -For the emulator, all you need is a properly set up [Go](https://golang.org) installation. -To run the debug client, you'll have to install [Angular6+](https://angular.io), then install the dependencies via npm. +A functional Commodore 64 emulator written in Go that runs in your terminal. This project emulates the core hardware of the C64 including the MOS 6510 CPU, CIA chip, VIC-II display (text mode), and full 64KB memory with bank switching. -### How to build the emulator -Run `make build` in the root directory. +## Features -### How to run the emulator -Run `make run` to fire up the emulator with the official C64 BASIC rom, with logs disabled. +- **MOS 6510 CPU** - Full instruction set emulation with all 13 addressing modes +- **CIA (Complex Interface Adapter)** - Timer support, keyboard matrix scanning, and interrupt generation +- **Memory Bank Switching** - Accurate C64 memory map with ROM/RAM/IO bank configurations +- **VIC-II Text Display** - Terminal-based 40x25 character display using tcell +- **Keyboard Input** - Real-time keyboard handling mapped to the C64 keyboard matrix +- **PRG File Loading** - Load and run compiled 6502/6510 assembly binaries +- **Debug Mode** - WebSocket-based debug server with an Angular UI for stepping through code +- **Built-in Profiler** - Go pprof accessible via HTTP for performance analysis +- **6502 Test Suite** - Support for Klaus Dormann's functional test suite -### Loading & running binaries -By default, the emulator will load the official C64 BASIC ROM. If you'd like to specify a custom binary, you can use the `--prg-path` flag (see makefile for examples). +## Requirements -### Running unit tests -Run `make test` in the root directory +- **Go 1.21+** (developed with Go 1.25) +- **Node.js 18+** (for the debug UI, optional) +- A terminal emulator with color support -### Running built-in profiler -The emulator is running the built-it go profiler by default. -* You can access it by opening a browser and navigating to `http://:8888/debug/pprof`. -* It's also possible to generate a flame diagram with the hotspots by running `docker run uber/go-torch -u http://:8888/debug/pprof -p -t=30 > torch.svg` +## Quick Start -### Using the internal debug server -1. Start the emulator with the `-debug=true` flag, or run `make debug` -2. Start the Angular application by running `make debug-client` +### Build -### Misc -For debugging, you can load and run a complete 6502 instruction set test suite by running `make debug-test-suite`. -Or alternatively, try one of the compiled PRGs from the `_resources/prg` folder (see Makefile for details). +```bash +make build +``` -### References & thanks -I'd like to list a few references that I used to learn more about C64, Assembly, etc. They're all invaluable, and were massive help during development. -* [6502 instruction set test suite by Klaus Dormann](https://github.com/Klaus2m5/6502_65C02_functional_tests) -* [C64 Wiki](https://www.c64-wiki.com/wiki/Main_Page) -* [C64 ROM Disassembly](http://www.zimmers.net/anonftp/pub/cbm/src/c64/c64_rom_disassembly.txt) -* [Mapping the C64](http://www.unusedino.de/ec64/technical/project64/mapping_c64.html) -* [C64 Assembly programming tutorial](https://github.com/petriw/Commodore64Programming) -* [C64 Devkit](https://github.com/cliffordcarnmo/c64-devkit) -* [Emudore](https://github.com/marioballano/emudore) -* [VirtualC64](https://github.com/dirkwhoffmann/virtualc64) +### Run with C64 BASIC ROM -Special thanks to [Balazs Molnar](https://www.linkedin.com/in/balazsm1) for providing the initial test assembly apps & references! +```bash +make run +``` +### Run a PRG file + +```bash +./dist/main -prg-path=_resources/prg/7_Snake.prg -no-logs=true +``` + +### Run with debug mode + +```bash +./dist/main -debug=true +``` + +Then open the debug UI at `http://localhost:8080` (or serve the Angular build). + +## Command-Line Flags + +| Flag | Default | Description | +|------|---------|-------------| +| `-prg-path` | `""` | Path to a `.prg` binary to load and execute | +| `-delay` | `0` | Artificial delay (ms) between CPU instructions | +| `-debug` | `false` | Enable debug server on port 8080 | +| `-test` | `false` | Load 6502 functional test ROM instead of C64 ROMs | +| `-no-logs` | `false` | Disable file logging (logs go to `log.txt` by default) | + +## Architecture + +``` +go-c64/ +├── main.go # Entry point, CLI flag parsing +├── emulator.go # Emulator struct, main loop, ROM loading +├── emulator_debug.go # Debug command handler (WebSocket) +├── MOS6510/ # CPU emulation +│ ├── cpu.go # CPU struct, cycle execution, instruction dispatch +│ ├── cpu_instructions.go # All 56 instruction implementations +│ ├── cpu_status.go # Processor status register (N,V,B,D,I,Z,C flags) +│ ├── cpu_stack.go # Stack push/pop operations +│ ├── addressing_mode.go # 13 addressing mode definitions +│ ├── assembly_instruction.go # Opcode → instruction mapping (256 entries) +│ └── assembly_instruction_type.go # Instruction type enum +├── CIA/ # Complex Interface Adapter +│ ├── cia.go # CIA registers, timers, keyboard matrix I/O +│ ├── cia_debug.go # CIA state serialization for debug UI +│ └── keyboard.go # Key-to-matrix mapping, keyboard handling +├── RAM/ # Memory subsystem +│ ├── memory.go # 64KB memory with bank switching logic +│ ├── bank.go # Bank type definitions (BASIC, CHARENG, KERNAL) +│ └── bank_configuration.go # Bank configuration modes (ROM, RAM, IO) +├── VIC2/ # Video chip (text mode) +│ ├── memory_display.go # Terminal rendering with tcell +│ ├── c64_char_converter.go # Screen code → ASCII character mapping +│ └── c64_color_converter.go # C64 color index → terminal color mapping +├── numeric/ # Utility functions +│ └── numeric.go # Byte/uint16 conversions, bit operations +├── internals/ # Debug infrastructure +│ ├── hub.go # WebSocket hub (client management) +│ ├── client.go # WebSocket client (read/write pumps) +│ ├── server.go # HTTP + WebSocket debug server +│ ├── command.go # Debug command enum and JSON serialization +│ ├── telemetry.go # Telemetry message struct +│ └── WebUI/ # Angular 19 debug frontend +└── _resources/ # ROMs, test programs, documentation + ├── roms/ # C64 BASIC, KERNAL, and character ROMs + ├── prg/ # Compiled assembly programs + ├── bas/ # BASIC programs + ├── tests/ # 6502 functional test suite + └── Doc/ # Hardware documentation +``` + +## Hardware Emulation Details + +### MOS 6510 CPU + +The CPU emulation covers all official 6502/6510 instructions: + +| Category | Instructions | +|----------|-------------| +| Load/Store | LDA, LDX, LDY, STA, STX, STY | +| Transfer | TAX, TXA, TAY, TYA, TSX, TXS | +| Arithmetic | ADC, SBC, INC, DEC, INX, DEX, INY, DEY | +| Logic | AND, ORA, EOR, BIT | +| Shift/Rotate | ASL, LSR, ROL, ROR | +| Compare | CMP, CPX, CPY | +| Branch | BCC, BCS, BEQ, BNE, BMI, BPL, BVC, BVS | +| Jump | JMP, JSR, RTS, RTI | +| Stack | PHA, PLA, PHP, PLP | +| Flags | SEC, CLC, SED, CLD, SEI, CLI, CLV | +| System | BRK, NOP | + +**Addressing Modes:** Implied, Immediate, Zero Page, Zero Page X/Y, Absolute, Absolute X/Y, Indirect, Indexed Indirect (X), Indirect Indexed (Y), Relative, Accumulator + +### Memory Map + +The emulator implements the C64's bank switching mechanism controlled by the PLA (Programmable Logic Array) at address $0001: + +| Address Range | Default Configuration | +|---------------|----------------------| +| $0000-$00FF | Zero Page (RAM) | +| $0100-$01FF | Stack (RAM) | +| $0200-$9FFF | RAM | +| $A000-$BFFF | BASIC ROM (switchable to RAM) | +| $C000-$CFFF | RAM | +| $D000-$D3FF | VIC-II I/O (switchable to Character ROM or RAM) | +| $D400-$DBFF | I/O area | +| $DC00-$DC0F | CIA 1 (keyboard, joystick) | +| $DD00-$DD0F | CIA 2 | +| $E000-$FFFF | KERNAL ROM (switchable to RAM) | + +### CIA Chip + +- Keyboard matrix scanning (8x8 matrix) +- Timer A and Timer B registers +- Interrupt generation for the CPU +- Port A/B read and write + +### VIC-II (Text Mode) + +- 40x25 character display +- 16 C64 colors mapped to terminal colors +- Background and border color registers +- Screen memory at $0400, color RAM at $D800 + +## Debug UI + +The debug frontend is an Angular 19 application that communicates with the emulator via WebSocket. + +### Building the Debug UI + +```bash +cd internals/WebUI +npm install +npm run build +``` + +### Debug Commands + +| Command | Description | +|---------|-------------| +| `Start` | Resume emulation | +| `Stop` | Pause emulation | +| `ExecuteNext` | Execute single instruction | +| `GetCPUState` | Get CPU register values | +| `GetCIAState` | Get CIA register values | +| `GetEmulatorState` | Get emulator state (cycle count, flags) | +| `GetMemoryContent` | Get full 64KB memory dump | +| `SetBreakpoint` | Set breakpoint at address | + +### Debug UI Features + +- Play/Pause/Step execution controls +- CPU register state table (A, X, Y, SP, PC, Status) +- CIA chip state (timers, interrupts, PORT_A) +- Emulator state (cycle count, pause flag, breakpoint address) +- Memory hex viewer with PC highlight (scrolling window around current instruction) + +## Running Tests + +```bash +# Run all tests +go test ./... + +# Run tests with verbose output +go test -v ./... + +# Run tests for a specific package +go test -v ./MOS6510/ +go test -v ./CIA/ +go test -v ./RAM/ +go test -v ./VIC2/ +go test -v ./numeric/ +go test -v ./internals/ +``` + +The test suite includes 285 tests covering: +- All CPU instructions with multiple addressing modes +- CPU status flag operations +- Stack push/pop behavior +- Memory bank switching +- CIA keyboard matrix operations +- VIC-II character and color conversion +- Numeric utility functions +- Debug command serialization + +## Makefile Targets + +| Target | Description | +|--------|-------------| +| `make build` | Build the emulator binary | +| `make run` | Build and run with BASIC ROM (no logs) | +| `make run-log` | Build and run with logging enabled | +| `make run-snake` | Run the Snake game | +| `make run-colors` | Run the color demo | +| `make debug` | Run in debug mode | +| `make debug-test-suite` | Run with 6502 test suite in debug mode | + +## Profiling + +The emulator exposes a Go pprof HTTP server on port 8888: + +```bash +# View available profiles +open http://localhost:8888/debug/pprof + +# Generate a CPU profile +go tool pprof http://localhost:8888/debug/pprof/profile?seconds=30 + +# Generate a flame graph +docker run uber/go-torch -u http://:8888/debug/pprof -p -t=30 > torch.svg +``` + +## Dependencies + +| Package | Version | Purpose | +|---------|---------|---------| +| github.com/gdamore/tcell/v2 | v2.7.4 | Terminal UI rendering | +| github.com/gorilla/websocket | v1.5.3 | WebSocket for debug server | + +## Contributing + +1. Fork the repository +2. Create a feature branch +3. Write tests for new functionality +4. Ensure all tests pass: `go test ./...` +5. Submit a pull request + +## Known Limitations + +- VIC-II only supports text mode (no bitmap/sprite graphics) +- CIA timers are simplified (no full cycle-accurate timing) +- No SID (sound) chip emulation +- No joystick support +- Illegal/undocumented 6502 opcodes are not implemented + +## References + +- [6502 Instruction Set Test Suite by Klaus Dormann](https://github.com/Klaus2m5/6502_65C02_functional_tests) +- [C64 Wiki](https://www.c64-wiki.com/wiki/Main_Page) +- [C64 ROM Disassembly](http://www.zimmers.net/anonftp/pub/cbm/src/c64/c64_rom_disassembly.txt) +- [Mapping the C64](http://www.unusedino.de/ec64/technical/project64/mapping_c64.html) +- [C64 Assembly Programming Tutorial](https://github.com/petriw/Commodore64Programming) +- [C64 Devkit](https://github.com/cliffordcarnmo/c64-devkit) +- [Emudore](https://github.com/marioballano/emudore) +- [VirtualC64](https://github.com/dirkwhoffmann/virtualc64) + +## License + +This software comes as-is and is not meant to be production-ready. Use it at your own risk. + +## Acknowledgments + +Special thanks to [Balazs Molnar](https://www.linkedin.com/in/balazsm1) for providing the initial test assembly apps and references. diff --git a/VIC2/c64_char_converter_test.go b/VIC2/c64_char_converter_test.go new file mode 100644 index 0000000..1a40fe8 --- /dev/null +++ b/VIC2/c64_char_converter_test.go @@ -0,0 +1,170 @@ +package VIC2 + +import ( + "testing" +) + +func TestAsciiCharacters_Space_Code32(t *testing.T) { + converter := asciiCharacters() + + result := converter(32) + if result != ' ' { + t.Errorf("Expected space for code 32, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_LetterA_Code1(t *testing.T) { + converter := asciiCharacters() + + result := converter(1) + // Code 1 maps to 'A' (uppercase in the charList) + if result != 'A' { + t.Errorf("Expected 'A' for code 1, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_LetterB_Code2(t *testing.T) { + converter := asciiCharacters() + + result := converter(2) + if result != 'B' { + t.Errorf("Expected 'B' for code 2, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_LetterC_Code3(t *testing.T) { + converter := asciiCharacters() + + result := converter(3) + if result != 'C' { + t.Errorf("Expected 'C' for code 3, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Numbers_Codes48to57(t *testing.T) { + converter := asciiCharacters() + + for i := byte(48); i <= 57; i++ { + expected := rune('0' + (i - 48)) + result := converter(i) + if result != expected { + t.Errorf("For code %d: expected '%c', got '%c'", i, expected, result) + } + } +} + +func TestAsciiCharacters_HighBitMaskedOff(t *testing.T) { + converter := asciiCharacters() + + // Code 1 with high bit set (1 + 128 = 129) should still map like code 1 + result := converter(129) // 129 & 127 = 1 + expected := converter(1) + if result != expected { + t.Errorf("Expected high-bit masked code 129 to equal code 1, got '%c' vs '%c'", result, expected) + } +} + +func TestAsciiCharacters_HighBitMaskedOff_Space(t *testing.T) { + converter := asciiCharacters() + + // Code 32 with high bit set (32 + 128 = 160) should still map like code 32 + result := converter(160) // 160 & 127 = 32 + expected := converter(32) + if result != expected { + t.Errorf("Expected high-bit masked code 160 to equal code 32 (space), got '%c' vs '%c'", result, expected) + } +} + +func TestAsciiCharacters_UnmappedCode_ReturnsSpace(t *testing.T) { + converter := asciiCharacters() + + // Code 96 maps to "SPACE" in the charList + result := converter(96) + if result != ' ' { + t.Errorf("Expected space for code 96, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_LetterZ_Code26(t *testing.T) { + converter := asciiCharacters() + + result := converter(26) + if result != 'Z' { + t.Errorf("Expected 'Z' for code 26, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Exclamation_Code33(t *testing.T) { + converter := asciiCharacters() + + result := converter(33) + if result != '!' { + t.Errorf("Expected '!' for code 33, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Colon_Code58(t *testing.T) { + converter := asciiCharacters() + + result := converter(58) + if result != ':' { + t.Errorf("Expected ':' for code 58, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Semicolon_Code59(t *testing.T) { + converter := asciiCharacters() + + result := converter(59) + if result != ';' { + t.Errorf("Expected ';' for code 59, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Slash_Code47(t *testing.T) { + converter := asciiCharacters() + + result := converter(47) + if result != '/' { + t.Errorf("Expected '/' for code 47, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Plus_Code43(t *testing.T) { + converter := asciiCharacters() + + result := converter(43) + if result != '+' { + t.Errorf("Expected '+' for code 43, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Minus_Code45(t *testing.T) { + converter := asciiCharacters() + + result := converter(45) + if result != '-' { + t.Errorf("Expected '-' for code 45, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_Zero_Code0(t *testing.T) { + converter := asciiCharacters() + + // Code 0 maps to ' ' (space character) in the charList + result := converter(0) + if result != ' ' { + t.Errorf("Expected space for code 0, got '%c' (%d)", result, result) + } +} + +func TestAsciiCharacters_ConsistentResults(t *testing.T) { + converter := asciiCharacters() + + // Calling with same value should always return same result + result1 := converter(5) + result2 := converter(5) + if result1 != result2 { + t.Errorf("Inconsistent results for same code: '%c' vs '%c'", result1, result2) + } +} diff --git a/VIC2/c64_color_converter.go b/VIC2/c64_color_converter.go index cadf897..5c5bd45 100644 --- a/VIC2/c64_color_converter.go +++ b/VIC2/c64_color_converter.go @@ -1,7 +1,7 @@ package VIC2 import ( - "github.com/gdamore/tcell" + "github.com/gdamore/tcell/v2" ) func getColor(value byte) (st tcell.Color) { diff --git a/VIC2/c64_color_converter_test.go b/VIC2/c64_color_converter_test.go new file mode 100644 index 0000000..9e19200 --- /dev/null +++ b/VIC2/c64_color_converter_test.go @@ -0,0 +1,179 @@ +package VIC2 + +import ( + "testing" + + "github.com/gdamore/tcell/v2" +) + +func TestGetColor_Black(t *testing.T) { + result := getColor(0) + if result != tcell.ColorBlack { + t.Errorf("Expected ColorBlack for value 0, got %v", result) + } +} + +func TestGetColor_White(t *testing.T) { + result := getColor(1) + if result != tcell.ColorWhite { + t.Errorf("Expected ColorWhite for value 1, got %v", result) + } +} + +func TestGetColor_DarkRed(t *testing.T) { + result := getColor(2) + if result != tcell.ColorDarkRed { + t.Errorf("Expected ColorDarkRed for value 2, got %v", result) + } +} + +func TestGetColor_LightCyan(t *testing.T) { + result := getColor(3) + if result != tcell.ColorLightCyan { + t.Errorf("Expected ColorLightCyan for value 3, got %v", result) + } +} + +func TestGetColor_Maroon(t *testing.T) { + result := getColor(4) + if result != tcell.ColorMaroon { + t.Errorf("Expected ColorMaroon for value 4, got %v", result) + } +} + +func TestGetColor_DarkGreen(t *testing.T) { + result := getColor(5) + if result != tcell.ColorDarkGreen { + t.Errorf("Expected ColorDarkGreen for value 5, got %v", result) + } +} + +func TestGetColor_DarkBlue(t *testing.T) { + result := getColor(6) + if result != tcell.ColorDarkBlue { + t.Errorf("Expected ColorDarkBlue for value 6, got %v", result) + } +} + +func TestGetColor_Yellow(t *testing.T) { + result := getColor(7) + if result != tcell.ColorYellow { + t.Errorf("Expected ColorYellow for value 7, got %v", result) + } +} + +func TestGetColor_YellowGreen(t *testing.T) { + result := getColor(8) + if result != tcell.ColorYellowGreen { + t.Errorf("Expected ColorYellowGreen for value 8, got %v", result) + } +} + +func TestGetColor_DarkMagenta(t *testing.T) { + result := getColor(9) + if result != tcell.ColorDarkMagenta { + t.Errorf("Expected ColorDarkMagenta for value 9, got %v", result) + } +} + +func TestGetColor_Red(t *testing.T) { + result := getColor(10) + if result != tcell.ColorRed { + t.Errorf("Expected ColorRed for value 10, got %v", result) + } +} + +func TestGetColor_DarkGray(t *testing.T) { + result := getColor(11) + if result != tcell.ColorDarkGray { + t.Errorf("Expected ColorDarkGray for value 11, got %v", result) + } +} + +func TestGetColor_Gray(t *testing.T) { + result := getColor(12) + if result != tcell.ColorGray { + t.Errorf("Expected ColorGray for value 12, got %v", result) + } +} + +func TestGetColor_Green(t *testing.T) { + result := getColor(13) + if result != tcell.ColorGreen { + t.Errorf("Expected ColorGreen for value 13, got %v", result) + } +} + +func TestGetColor_Blue(t *testing.T) { + result := getColor(14) + if result != tcell.ColorBlue { + t.Errorf("Expected ColorBlue for value 14, got %v", result) + } +} + +func TestGetColor_DarkCyan(t *testing.T) { + result := getColor(15) + if result != tcell.ColorDarkCyan { + t.Errorf("Expected ColorDarkCyan for value 15, got %v", result) + } +} + +func TestGetColor_MasksHighBits(t *testing.T) { + // Value 16 should be masked to 0 (16 & 15 = 0) + result := getColor(16) + if result != tcell.ColorBlack { + t.Errorf("Expected ColorBlack for value 16 (masked to 0), got %v", result) + } +} + +func TestGetColor_MasksHighBits_Value17(t *testing.T) { + // Value 17 should be masked to 1 (17 & 15 = 1) + result := getColor(17) + if result != tcell.ColorWhite { + t.Errorf("Expected ColorWhite for value 17 (masked to 1), got %v", result) + } +} + +func TestGetColor_MasksHighBits_Value255(t *testing.T) { + // Value 255 should be masked to 15 (255 & 15 = 15) + result := getColor(255) + if result != tcell.ColorDarkCyan { + t.Errorf("Expected ColorDarkCyan for value 255 (masked to 15), got %v", result) + } +} + +func TestGetColor_MasksHighBits_Value32(t *testing.T) { + // Value 32 should be masked to 0 (32 & 15 = 0) + result := getColor(32) + if result != tcell.ColorBlack { + t.Errorf("Expected ColorBlack for value 32 (masked to 0), got %v", result) + } +} + +func TestGetColor_AllColors_TableDriven(t *testing.T) { + expected := map[byte]tcell.Color{ + 0: tcell.ColorBlack, + 1: tcell.ColorWhite, + 2: tcell.ColorDarkRed, + 3: tcell.ColorLightCyan, + 4: tcell.ColorMaroon, + 5: tcell.ColorDarkGreen, + 6: tcell.ColorDarkBlue, + 7: tcell.ColorYellow, + 8: tcell.ColorYellowGreen, + 9: tcell.ColorDarkMagenta, + 10: tcell.ColorRed, + 11: tcell.ColorDarkGray, + 12: tcell.ColorGray, + 13: tcell.ColorGreen, + 14: tcell.ColorBlue, + 15: tcell.ColorDarkCyan, + } + + for val, expectedColor := range expected { + result := getColor(val) + if result != expectedColor { + t.Errorf("For value %d: expected %v, got %v", val, expectedColor, result) + } + } +} diff --git a/VIC2/memory_display.go b/VIC2/memory_display.go index a09587f..d113802 100644 --- a/VIC2/memory_display.go +++ b/VIC2/memory_display.go @@ -5,7 +5,7 @@ import ( "os" "time" - "github.com/gdamore/tcell" + "github.com/gdamore/tcell/v2" "github.com/santatamas/go-c64/RAM" ) diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..8300cf9 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,143 @@ +# Architecture Documentation + +## System Overview + +The go-c64 emulator follows a modular architecture that mirrors the physical hardware of the Commodore 64. Each major hardware component is represented by its own Go package. + +``` +┌─────────────────────────────────────────────────────┐ +│ main.go │ +│ (CLI, initialization) │ +└─────────────────────┬───────────────────────────────┘ + │ +┌─────────────────────▼───────────────────────────────┐ +│ Emulator │ +│ (Main loop, coordination) │ +├──────────┬──────────┬──────────┬────────────────────┤ +│ MOS6510 │ CIA │ RAM │ VIC2 │ +│ (CPU) │ (I/O) │ (Memory) │ (Display) │ +└──────────┴──────────┴──────────┴────────────────────┘ + │ +┌─────────────────────▼───────────────────────────────┐ +│ internals │ +│ (Debug server, WebSocket, Telemetry) │ +└─────────────────────────────────────────────────────┘ +``` + +## Package Details + +### `main` (root package) + +**Files:** `main.go`, `emulator.go`, `emulator_debug.go` + +The main package ties everything together: + +- **main.go** - Parses CLI flags, initializes the emulator, starts the pprof server +- **emulator.go** - `Emulator` struct coordinates CPU, CIA, memory, and display. The main emulation loop runs in a goroutine executing CPU cycles while the display runs in the main goroutine +- **emulator_debug.go** - Handles debug commands received via WebSocket (start/stop/step/get state) + +**Emulation Loop:** +``` +for { + CIA.ExecuteCycle() // Update CIA timers + if CIA.Interrupt → CPU.Interrupt() // Handle IRQ + CPU.ExecuteCycle() // Fetch-decode-execute one instruction +} +``` + +### `MOS6510` - CPU Emulation + +**Key types:** +- `CPU` - Main CPU struct with registers (A, X, Y, SP, PC, S), memory pointer, instruction resolver +- `AssemblyInstruction` - Opcode mapping (type + addressing mode + cycle count) +- `AddressingMode` - Enum of 13 addressing modes +- `AssemblyInstructionType` - Enum of 56 instruction types + +**Execution flow:** +1. Read opcode byte from memory at PC +2. Increment PC +3. Look up `AssemblyInstruction` from opcode table +4. Dispatch to instruction handler method +5. Instruction reads operands (incrementing PC as needed) +6. Instruction modifies CPU state (registers, flags, memory) + +**Status Register (P):** +``` +Bit: 7 6 5 4 3 2 1 0 + N V - B D I Z C + │ │ │ │ │ │ └─ Carry + │ │ │ │ │ └─── Zero + │ │ │ │ └───── IRQ Disable + │ │ │ └─────── Decimal Mode + │ │ └───────── Break + │ └───────────── Overflow + └─────────────── Negative +``` + +### `CIA` - Complex Interface Adapter + +**Key types:** +- `CIA` - CIA chip state (timers, keyboard matrix, ports, interrupt flag) +- `Keyboard` - Keyboard input handler + +**Keyboard scanning:** The C64 uses an 8x8 keyboard matrix. When the CPU writes to PORT_A ($DC00), it selects which rows to scan. Reading PORT_B ($DC01) returns which columns have keys pressed in those rows. + +### `RAM` - Memory Subsystem + +**Key types:** +- `Memory` - Dual 64KB arrays (RAM + ROM) with bank switching logic +- `Bank` - Bank identifiers (BASIC, CHARENG, KERNAL) +- `BankConfiguration` - Bank modes (ROM, RAM, IO) + +**Bank switching:** Writing to address $0001 configures memory banks via three control bits: +- LORAM (bit 0) - BASIC ROM visibility +- HIRAM (bit 1) - KERNAL ROM visibility +- CHAREN (bit 2) - Character ROM vs I/O area + +### `VIC2` - Video Display + +**Key types:** +- `MemoryDisplay` - Terminal-based display using tcell + +**Display loop:** Runs at ~20fps, reading screen memory ($0400-$07E7) and color RAM ($D800-$DBE7) to render the 40x25 character grid in the terminal. + +### `numeric` - Utility Package + +Helper functions for byte manipulation: +- `ToInt16` / `ToInt16_2` - Little-endian byte-to-uint16 conversion +- `GetLO` / `GetHI` - Extract low/high bytes from uint16 +- `IsNegative` - Check bit 7 (sign bit) +- `GetBit` - Test arbitrary bit position + +### `internals` - Debug Infrastructure + +**Components:** +- `Hub` - WebSocket hub managing connected debug clients +- `Client` - Individual WebSocket connection with read/write goroutines +- `Command` - Enum of debug commands with JSON marshaling +- `Telemetry` - Message format for debug communication + +## Concurrency Model + +The emulator uses goroutines for: +1. **Main goroutine** - Display rendering loop (tcell event loop) +2. **Emulation goroutine** - CPU/CIA execution loop +3. **Event handler goroutine** - Channels for keyboard events and IRQ signals +4. **Debug server goroutines** - HTTP server, WebSocket hub, per-client read/write + +Communication between goroutines uses Go channels: +- `keyPressChannel` - Terminal key events → keyboard handler +- `irqChannel` - CIA interrupt signals → CPU + +## Data Flow + +``` +Terminal Input → tcell → keyPressChannel → CIA.SetKey() → keyboard matrix + │ +CPU reads $DC01 ←── CIA.ReadRegister() ←── keyboard matrix ──┘ + +CIA timer → interrupt → irqChannel → CPU.SetIRQ() → CPU.Interrupt() + │ + pushes PC & status to stack + jumps to IRQ vector ($FFFE) +``` diff --git a/docs/DEBUG_UI.md b/docs/DEBUG_UI.md new file mode 100644 index 0000000..5ea5fbf --- /dev/null +++ b/docs/DEBUG_UI.md @@ -0,0 +1,220 @@ +# Debug UI Documentation + +## Overview + +The debug UI is an Angular 19 web application that connects to the emulator via WebSocket to provide real-time debugging capabilities. It allows you to: + +- Start, stop, and step through CPU execution +- Inspect CPU registers, CIA state, and emulator state +- View memory contents with the current PC highlighted +- Set breakpoints at specific memory addresses + +## Setup + +### Prerequisites + +- Node.js 18 or later +- npm + +### Installation + +```bash +cd internals/WebUI +npm install +``` + +### Development + +```bash +npm start +``` + +The development server runs at `http://localhost:4200` with hot module reloading. + +### Production Build + +```bash +npm run build +``` + +Output is generated in `dist/WebUI/browser/`. + +## Architecture + +The debug UI uses Angular 19 standalone components with Angular Material for the UI. + +### Technology Stack + +| Technology | Version | Purpose | +|-----------|---------|---------| +| Angular | 19.2 | Application framework | +| Angular Material | 19.2 | UI component library | +| RxJS | 7.8 | Reactive WebSocket handling | +| TypeScript | 5.5 | Type-safe development | +| Zone.js | 0.15 | Change detection | + +### Component Structure + +``` +src/app/ +├── app.component.ts # Root shell (toolbar + layout) +├── controls/ +│ └── controls.component.ts # Toolbar buttons (play/pause/step/breakpoint) +├── cpu/ +│ └── cpu.component.ts # CPU register state table +├── cia/ +│ └── cia.component.ts # CIA chip state table +├── emulator/ +│ └── emulator.component.ts # Emulator state table +├── memory/ +│ └── memory.component.ts # Hex memory viewer +├── models/ # TypeScript interfaces +│ ├── telemetry.model.ts +│ ├── cpustate.model.ts +│ ├── ciastate.model.ts +│ ├── emulatorstate.model.ts +│ └── tablerow.model.ts +└── services/ + ├── websocket.service.ts # Low-level WebSocket connection + ├── telemetry.service.ts # Command sending/receiving + └── tablehelper.service.ts # Object → table row conversion +``` + +## WebSocket Protocol + +### Connection + +The UI connects to `ws://localhost:8080/ws` on startup. + +### Message Format + +All messages use the same JSON structure: + +```json +{ + "Command": "CommandName", + "Parameter": "optional_parameter", + "Payload": "base64_encoded_json_response" +} +``` + +### Request/Response Flow + +1. UI sends a command (e.g., `{"Command": "GetCPUState"}`) +2. Emulator processes the command +3. Emulator responds with the same command name and a base64-encoded JSON payload + +### Commands + +#### Start +Resume emulation from paused state. +```json +{"Command": "Start"} +→ {"Command": "Start", "Payload": "Ik9LIg=="} // "OK" base64 +``` + +#### Stop +Pause emulation. +```json +{"Command": "Stop"} +→ {"Command": "Stop", "Payload": "Ik9LIg=="} +``` + +#### ExecuteNext +Execute a single CPU instruction (step). +```json +{"Command": "ExecuteNext"} +→ {"Command": "ExecuteNext", "Payload": "Ik9LIg=="} +``` + +#### GetCPUState +Get current CPU register values. +```json +{"Command": "GetCPUState"} +→ {"Command": "GetCPUState", "Payload": ""} +``` + +Response payload (decoded): +```json +{ + "A": 0, + "Y": 0, + "X": 0, + "S": 48, + "P": 0, + "PC": 64738, + "SP": 255, + "SP_LOW": 256, + "SP_HIGH": 0, + "InstructionType": 120, + "InstructionName": "SEI" +} +``` + +#### GetCIAState +Get CIA chip register values. +```json +{"Command": "GetCIAState"} +→ {"Command": "GetCIAState", "Payload": ""} +``` + +#### GetEmulatorState +Get emulator-level state. +```json +{"Command": "GetEmulatorState"} +→ {"Command": "GetEmulatorState", "Payload": ""} +``` + +#### GetMemoryContent +Get full 64KB memory dump. +```json +{"Command": "GetMemoryContent"} +→ {"Command": "GetMemoryContent", "Payload": ""} +``` + +#### SetBreakpoint +Set a breakpoint at a decimal address. +```json +{"Command": "SetBreakpoint", "Parameter": "1024"} +``` + +The UI converts hex input to decimal before sending. + +## Usage Guide + +### Starting a Debug Session + +1. Start the emulator in debug mode: `./dist/main -debug=true` +2. Start the debug UI: `cd internals/WebUI && npm start` +3. Open `http://localhost:4200` in your browser + +The emulator starts paused. You'll see the toolbar with control buttons. + +### Toolbar Controls + +| Icon | Action | Description | +|------|--------|-------------| +| Play | Start | Resume continuous execution | +| Pause | Stop | Pause execution | +| Skip Next | Step | Execute one instruction | +| Memory | CPU State | Fetch current CPU registers | +| Computer | Emulator State | Fetch emulator state | +| Keyboard | CIA State | Fetch CIA chip state | +| SD Card | Memory | Fetch memory contents | + +### Setting Breakpoints + +1. Enter a hex address in the breakpoint input (e.g., `FCE2`) +2. Click "Set BP" +3. Start execution - it will pause when PC reaches that address + +### Memory Viewer + +The memory viewer shows a window of ~200 bytes around the current PC: +- Each line shows 16 bytes in hexadecimal +- The address prefix shows the offset (e.g., `0000fce0 |`) +- The current PC instruction is highlighted in yellow with red text + +### Refreshing State + +When you click Step or Start/Stop, the UI automatically refreshes all state panels (CPU, CIA, Emulator, Memory) with staggered timing to avoid WebSocket congestion. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 0000000..9800132 --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,229 @@ +# Development Guide + +## Prerequisites + +- Go 1.21 or later +- Node.js 18+ and npm (for debug UI development) +- A terminal with color support (for running the emulator) + +## Setting Up the Development Environment + +```bash +# Clone the repository +git clone https://github.com/santatamas/go-c64.git +cd go-c64 + +# Download Go dependencies +go mod tidy + +# Build the project +go build -o ./dist/main + +# Run tests +go test ./... +``` + +## Project Structure + +``` +go-c64/ +├── main.go # Application entry point +├── emulator.go # Core emulator logic +├── emulator_debug.go # Debug mode handler +├── Makefile # Build and run targets +├── go.mod # Go module definition +├── MOS6510/ # CPU package +├── CIA/ # CIA chip package +├── RAM/ # Memory package +├── VIC2/ # Display package +├── numeric/ # Utility functions +├── internals/ # Debug server +│ └── WebUI/ # Angular debug frontend +├── _resources/ # ROMs, test programs, docs +├── docs/ # Project documentation +└── dist/ # Build output +``` + +## Running the Emulator + +### With C64 BASIC ROM (default) + +```bash +make run +``` + +This loads the BASIC, KERNAL, and character ROMs and starts execution at the hard reset vector ($FCE2). + +### With a PRG file + +```bash +./dist/main -prg-path=_resources/prg/7_Snake.prg -no-logs=true +``` + +PRG files contain a 2-byte load address header followed by the program data. + +### In Debug Mode + +```bash +./dist/main -debug=true +``` + +The emulator starts paused. Use the debug UI or WebSocket commands to step through execution. + +## Debug UI Development + +The debug frontend is an Angular 19 standalone application. + +```bash +cd internals/WebUI + +# Install dependencies +npm install + +# Development server (hot reload) +npm start +# Access at http://localhost:4200 + +# Production build +npm run build +# Output at dist/WebUI/ +``` + +### Serving the built UI + +After building, you can serve the static files with any HTTP server: + +```bash +cd internals/WebUI/dist/WebUI/browser +npx http-server . -p 4200 +``` + +## Adding New CPU Instructions + +1. Add the instruction type to `MOS6510/assembly_instruction_type.go` +2. Add the opcode mapping in `MOS6510/assembly_instruction.go` +3. Implement the instruction method in `MOS6510/cpu_instructions.go` +4. Add the dispatch case in the `callMethod` switch in `MOS6510/cpu.go` +5. Write tests in `MOS6510/cpu_instructions_test.go` +6. Regenerate stringer: `go generate ./MOS6510/` + +### Instruction Implementation Pattern + +```go +// EXAMPLE Instruction description +// Operation: description of what it does +// N Z C I D V (which flags are affected) +// * * _ _ _ _ (* = affected, _ = unchanged) +func (cpu *CPU) EXAMPLE(mode AddressingMode) { + log.Println("EXAMPLE called -- adr. mode: ", mode.String()) + + // Read operand based on addressing mode + mem := cpu.getMemoryValue(mode) + + // Perform operation + cpu.A = mem + + // Update status flags + cpu.setStatusZero(cpu.A == 0) + cpu.setStatusNegative(cpu.A & 0x80 != 0) +} +``` + +## Testing + +### Running All Tests + +```bash +go test ./... +``` + +### Running with Coverage + +```bash +go test -cover ./... +``` + +### Running a Specific Test + +```bash +go test -v -run TestCPU_LDA_Immediate ./MOS6510/ +``` + +### Test Organization + +Each package has its own `_test.go` files: + +| Package | Test File | Coverage | +|---------|-----------|----------| +| MOS6510 | `cpu_instructions_test.go` | All 56 instructions, multiple addressing modes | +| MOS6510 | `cpu_status_test.go` | Status flag set/clear operations | +| MOS6510 | `cpu_stack_test.go` | Stack push/pop, LIFO order, address range | +| CIA | `cia_test.go` | Keyboard matrix, interrupt, register I/O | +| RAM | `memory_test.go` | Bank switching, CIA routing, ROM/RAM access | +| VIC2 | `c64_char_converter_test.go` | Screen code → character mapping | +| VIC2 | `c64_color_converter_test.go` | Color index → terminal color | +| numeric | `numeric_test.go` | Byte operations, bit testing | +| internals | `command_test.go` | Command serialization/deserialization | + +## Debugging Tips + +### Enable File Logging + +By default (without `-no-logs`), the emulator logs extensively to `log.txt`: + +```bash +./dist/main & +tail -f log.txt +``` + +### Using the Profiler + +```bash +# CPU profile +go tool pprof http://localhost:8888/debug/pprof/profile?seconds=10 + +# Memory profile +go tool pprof http://localhost:8888/debug/pprof/heap + +# Goroutine dump +curl http://localhost:8888/debug/pprof/goroutine?debug=1 +``` + +### Running the 6502 Test Suite + +Klaus Dormann's comprehensive test suite validates all CPU instructions: + +```bash +./dist/main -debug=true -test=true +``` + +This loads the test ROM at $0400 and begins execution. Use the debug UI to verify the test progresses through all instruction tests (the test loops infinitely on failure at the failing test's address). + +## Code Generation + +The project uses Go's `stringer` tool for enum string methods: + +```bash +# Regenerate string methods +cd MOS6510 +go generate +``` + +This produces: +- `addressingmode_string.go` - AddressingMode.String() +- `assemblyinstructiontype_string.go` - AssemblyInstructionType.String() + +## ROM Files + +The emulator requires C64 ROM files in `_resources/roms/`: + +| File | Size | Description | +|------|------|-------------| +| `basic.901226-01.bin` | 8KB | BASIC interpreter | +| `kernal.901227-03.bin` | 8KB | KERNAL operating system | +| `characters.901225-01.bin` | 4KB | Character set | + +These are loaded at their respective addresses during initialization: +- BASIC → $A000 +- Characters → $D000 +- KERNAL → $E000 diff --git a/emulator.go b/emulator.go index ee7f54c..3f402af 100644 --- a/emulator.go +++ b/emulator.go @@ -2,12 +2,12 @@ package main import ( "fmt" - "io/ioutil" + "io" "log" "os" "time" - "github.com/gdamore/tcell" + "github.com/gdamore/tcell/v2" "github.com/santatamas/go-c64/CIA" "github.com/santatamas/go-c64/MOS6510" "github.com/santatamas/go-c64/RAM" @@ -127,7 +127,7 @@ func (emu *Emulator) loadFile(path string) { fmt.Println("Error! Can't open file") } - byteContent, err := ioutil.ReadAll(file) + byteContent, err := io.ReadAll(file) if err != nil { log.Fatal(err) } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..2845bec --- /dev/null +++ b/go.mod @@ -0,0 +1,18 @@ +module github.com/santatamas/go-c64 + +go 1.25.1 + +require ( + github.com/gdamore/tcell/v2 v2.7.4 + github.com/gorilla/websocket v1.5.3 +) + +require ( + github.com/gdamore/encoding v1.0.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + golang.org/x/sys v0.17.0 // indirect + golang.org/x/term v0.17.0 // indirect + golang.org/x/text v0.14.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..34111ae --- /dev/null +++ b/go.sum @@ -0,0 +1,49 @@ +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.7.4 h1:sg6/UnTM9jGpZU+oFYAsDahfchWAFW8Xx2yFinNSAYU= +github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internals/WebUI/README.md b/internals/WebUI/README.md index 9430f74..a71fcd0 100644 --- a/internals/WebUI/README.md +++ b/internals/WebUI/README.md @@ -1,27 +1,46 @@ -# WebUI +# C64 Emulator Debug UI -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.6. +An Angular 19 web application for debugging the go-c64 emulator in real-time via WebSocket. -## Development server +## Features -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. +- Real-time CPU register inspection +- CIA chip state monitoring +- Emulator state tracking +- Memory hex viewer with PC highlighting +- Execution control (start/stop/step) +- Breakpoint support -## Code scaffolding +## Quick Start -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. +```bash +# Install dependencies +npm install -## Build +# Start development server +npm start -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. +# Production build +npm run build +``` -## Running unit tests +## Requirements -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). +- Node.js 18+ +- npm 9+ +- The go-c64 emulator running with `-debug=true` flag -## Running end-to-end tests +## Technology Stack -Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +- Angular 19.2 +- Angular Material 19.2 +- RxJS 7.8 +- TypeScript 5.5 -## Further help +## Usage -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). +1. Start the emulator: `../../dist/main -debug=true` +2. Start the dev server: `npm start` +3. Open http://localhost:4200 + +See [docs/DEBUG_UI.md](../../docs/DEBUG_UI.md) for detailed documentation. diff --git a/internals/WebUI/angular.json b/internals/WebUI/angular.json index ce165cc..dc09463 100644 --- a/internals/WebUI/angular.json +++ b/internals/WebUI/angular.json @@ -3,139 +3,54 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "WebUI": { + "go-c64-debug-ui": { + "projectType": "application", "root": "", "sourceRoot": "src", - "projectType": "application", "prefix": "app", - "schematics": { - "@schematics/angular:component": { - "styleext": "scss" - } - }, "architect": { "build": { - "builder": "@angular-devkit/build-angular:browser", + "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/WebUI", "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "src/tsconfig.app.json", + "browser": "src/main.ts", + "tsConfig": "tsconfig.app.json", "assets": [ - "src/favicon.ico", - "src/assets" + { "glob": "**/*", "input": "src/assets" }, + { "glob": "favicon.ico", "input": "src" } ], "styles": [ - "./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css", + "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" ], "scripts": [] }, "configurations": { "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "extractCss": true, - "namedChunks": false, - "aot": true, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - } - ] + { "type": "initial", "maximumWarning": "500kB", "maximumError": "1MB" }, + { "type": "anyComponentStyle", "maximumWarning": "2kB", "maximumError": "4kB" } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true } - } + }, + "defaultConfiguration": "production" }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "WebUI:build" - }, "configurations": { - "production": { - "browserTarget": "WebUI:build:production" - } - } - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "WebUI:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "src/tsconfig.spec.json", - "karmaConfig": "src/karma.conf.js", - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css", - "src/styles.scss" - ], - "scripts": [], - "assets": [ - "src/favicon.ico", - "src/assets" - ] - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.app.json", - "src/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] - } - } - } - }, - "WebUI-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "WebUI:serve" + "production": { "buildTarget": "go-c64-debug-ui:build:production" }, + "development": { "buildTarget": "go-c64-debug-ui:build:development" } }, - "configurations": { - "production": { - "devServerTarget": "WebUI:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } + "defaultConfiguration": "development" } } } - }, - "defaultProject": "WebUI" -} \ No newline at end of file + } +} diff --git a/internals/WebUI/dist/WebUI/favicon.ico b/internals/WebUI/dist/WebUI/favicon.ico deleted file mode 100644 index 8081c7ceaf2be08bf59010158c586170d9d2d517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- - - - - C64 Internals - - - - - - - - - - - diff --git a/internals/WebUI/dist/WebUI/main.js b/internals/WebUI/dist/WebUI/main.js deleted file mode 100644 index da95583..0000000 --- a/internals/WebUI/dist/WebUI/main.js +++ /dev/null @@ -1,1118 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ - -/***/ "./src/$$_lazy_route_resource lazy recursive": -/*!**********************************************************!*\ - !*** ./src/$$_lazy_route_resource lazy namespace object ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function webpackEmptyAsyncContext(req) { - // Here Promise.resolve().then() is used instead of new Promise() to prevent - // uncaught exception popping up in devtools - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); -} -webpackEmptyAsyncContext.keys = function() { return []; }; -webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; -module.exports = webpackEmptyAsyncContext; -webpackEmptyAsyncContext.id = "./src/$$_lazy_route_resource lazy recursive"; - -/***/ }), - -/***/ "./src/app/app-routing.module.ts": -/*!***************************************!*\ - !*** ./src/app/app-routing.module.ts ***! - \***************************************/ -/*! exports provided: AppRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function() { return AppRoutingModule; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - -var routes = []; -var AppRoutingModule = /** @class */ (function () { - function AppRoutingModule() { - } - AppRoutingModule = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] - }) - ], AppRoutingModule); - return AppRoutingModule; -}()); - - - -/***/ }), - -/***/ "./src/app/app.component.html": -/*!************************************!*\ - !*** ./src/app/app.component.html ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n \n \n \n pets\n \n \n\n
\n \n \n \n \n
\n\n\n" - -/***/ }), - -/***/ "./src/app/app.component.scss": -/*!************************************!*\ - !*** ./src/app/app.component.scss ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".example-icon {\n padding: 0 14px; }\n\n.example-spacer {\n flex: 1 1 auto; }\n\napp-emulator, app-cpu {\n margin-right: 20px; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9hcHAuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDSSxlQUFlLEVBQUE7O0FBR2pCO0VBQ0UsY0FBYyxFQUFBOztBQUdqQjtFQUNHLGtCQUFrQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmV4YW1wbGUtaWNvbiB7XG4gICAgcGFkZGluZzogMCAxNHB4O1xuICB9XG5cbiAgLmV4YW1wbGUtc3BhY2VyIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgfVxuXG4gYXBwLWVtdWxhdG9yLCBhcHAtY3B1IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gIH0iXX0= */" - -/***/ }), - -/***/ "./src/app/app.component.ts": -/*!**********************************!*\ - !*** ./src/app/app.component.ts ***! - \**********************************/ -/*! exports provided: AppComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppComponent", function() { return AppComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - -var AppComponent = /** @class */ (function () { - function AppComponent() { - this.title = 'WebUI'; - } - AppComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-root', - template: __webpack_require__(/*! ./app.component.html */ "./src/app/app.component.html"), - styles: [__webpack_require__(/*! ./app.component.scss */ "./src/app/app.component.scss")] - }) - ], AppComponent); - return AppComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/app.module.ts": -/*!*******************************!*\ - !*** ./src/app/app.module.ts ***! - \*******************************/ -/*! exports provided: AppModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppModule", function() { return AppModule; }); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm5/platform-browser.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app-routing.module */ "./src/app/app-routing.module.ts"); -/* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app.component */ "./src/app/app.component.ts"); -/* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/platform-browser/animations */ "./node_modules/@angular/platform-browser/fesm5/animations.js"); -/* harmony import */ var _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/toolbar */ "./node_modules/@angular/material/esm5/toolbar.es5.js"); -/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/icon */ "./node_modules/@angular/material/esm5/icon.es5.js"); -/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/material/button */ "./node_modules/@angular/material/esm5/button.es5.js"); -/* harmony import */ var _logs_logs_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./logs/logs.component */ "./src/app/logs/logs.component.ts"); -/* harmony import */ var _services_websocket_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./services/websocket.service */ "./src/app/services/websocket.service.ts"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _cpu_cpu_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./cpu/cpu.component */ "./src/app/cpu/cpu.component.ts"); -/* harmony import */ var _memory_memory_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./memory/memory.component */ "./src/app/memory/memory.component.ts"); -/* harmony import */ var _emulator_emulator_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./emulator/emulator.component */ "./src/app/emulator/emulator.component.ts"); -/* harmony import */ var _angular_material_table__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/table */ "./node_modules/@angular/material/esm5/table.es5.js"); -/* harmony import */ var _controls_controls_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./controls/controls.component */ "./src/app/controls/controls.component.ts"); -/* harmony import */ var _angular_material_grid_list__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @angular/material/grid-list */ "./node_modules/@angular/material/esm5/grid-list.es5.js"); -/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @angular/material/card */ "./node_modules/@angular/material/esm5/card.es5.js"); -/* harmony import */ var _cia_cia_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./cia/cia.component */ "./src/app/cia/cia.component.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - - - - - - - - - - - - - - - - -var AppModule = /** @class */ (function () { - function AppModule() { - } - AppModule = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - declarations: [ - _app_component__WEBPACK_IMPORTED_MODULE_3__["AppComponent"], - _logs_logs_component__WEBPACK_IMPORTED_MODULE_8__["LogsComponent"], - _cpu_cpu_component__WEBPACK_IMPORTED_MODULE_11__["CPUComponent"], - _memory_memory_component__WEBPACK_IMPORTED_MODULE_12__["MemoryComponent"], - _emulator_emulator_component__WEBPACK_IMPORTED_MODULE_13__["EmulatorComponent"], - _controls_controls_component__WEBPACK_IMPORTED_MODULE_15__["ControlsComponent"], - _cia_cia_component__WEBPACK_IMPORTED_MODULE_18__["CiaComponent"] - ], - imports: [ - _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], - _app_routing_module__WEBPACK_IMPORTED_MODULE_2__["AppRoutingModule"], - _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_4__["BrowserAnimationsModule"], - _angular_material_toolbar__WEBPACK_IMPORTED_MODULE_5__["MatToolbarModule"], - _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__["MatIconModule"], - _angular_material_button__WEBPACK_IMPORTED_MODULE_7__["MatButtonModule"], - _angular_material_table__WEBPACK_IMPORTED_MODULE_14__["MatTableModule"], - _angular_material_grid_list__WEBPACK_IMPORTED_MODULE_16__["MatGridListModule"], - _angular_material_card__WEBPACK_IMPORTED_MODULE_17__["MatCardModule"] - ], - providers: [_services_websocket_service__WEBPACK_IMPORTED_MODULE_9__["WebsocketService"], _services_telemetry_service__WEBPACK_IMPORTED_MODULE_10__["TelemetryService"]], - bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_3__["AppComponent"]] - }) - ], AppModule); - return AppModule; -}()); - - - -/***/ }), - -/***/ "./src/app/cia/cia.component.html": -/*!****************************************!*\ - !*** ./src/app/cia/cia.component.html ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n \n CIA\n Chip states\n \n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
CIA Property {{element.Name}} Value {{element.Value}}
\n\n \n

\n\n

\n
\n
" - -/***/ }), - -/***/ "./src/app/cia/cia.component.scss": -/*!****************************************!*\ - !*** ./src/app/cia/cia.component.scss ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "table {\n width: 100%; }\n\n.mat-header-row {\n display: none; }\n\nmat-card {\n width: 320px;\n display: inline-block; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9jaWEvY2lhLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksV0FBVyxFQUFBOztBQUViO0VBQWlCLGFBQVksRUFBQTs7QUFFN0I7RUFDRSxZQUFZO0VBQ1oscUJBQXFCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9jaWEvY2lhLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsidGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5tYXQtaGVhZGVyLXJvdyB7ZGlzcGxheTpub25lO31cblxuICBtYXQtY2FyZCB7XG4gICAgd2lkdGg6IDMyMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfSJdfQ== */" - -/***/ }), - -/***/ "./src/app/cia/cia.component.ts": -/*!**************************************!*\ - !*** ./src/app/cia/cia.component.ts ***! - \**************************************/ -/*! exports provided: CiaComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CiaComponent", function() { return CiaComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/tablehelper.service */ "./src/app/services/tablehelper.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var CiaComponent = /** @class */ (function () { - function CiaComponent(telemetryService, helper) { - var _this = this; - this.telemetryService = telemetryService; - this.helper = helper; - this.displayedColumns = ['name', 'value']; - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - if (telemetry.Command === 'GetCIAState') { - _this.dataSource = helper.convertToTableRowsWithBlackList(JSON.parse(atob(telemetry.Payload)), ['Keyboard_matrix']); - } - }); - } - CiaComponent.prototype.ngOnInit = function () { - }; - CiaComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-cia', - template: __webpack_require__(/*! ./cia.component.html */ "./src/app/cia/cia.component.html"), - styles: [__webpack_require__(/*! ./cia.component.scss */ "./src/app/cia/cia.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__["TelemetryService"], _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__["TablehelperService"]]) - ], CiaComponent); - return CiaComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/controls/controls.component.html": -/*!**************************************************!*\ - !*** ./src/app/controls/controls.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "

\n \n \n \n \n \n \n \n \n\n \n \n\n

" - -/***/ }), - -/***/ "./src/app/controls/controls.component.scss": -/*!**************************************************!*\ - !*** ./src/app/controls/controls.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2NvbnRyb2xzL2NvbnRyb2xzLmNvbXBvbmVudC5zY3NzIn0= */" - -/***/ }), - -/***/ "./src/app/controls/controls.component.ts": -/*!************************************************!*\ - !*** ./src/app/controls/controls.component.ts ***! - \************************************************/ -/*! exports provided: ControlsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControlsComponent", function() { return ControlsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _models_emulatorstate_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/emulatorstate.model */ "./src/app/models/emulatorstate.model.ts"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _models_telemetry_model__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/telemetry.model */ "./src/app/models/telemetry.model.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - -var ControlsComponent = /** @class */ (function () { - function ControlsComponent(telemetryService) { - var _this = this; - this.telemetryService = telemetryService; - this.state = new _models_emulatorstate_model__WEBPACK_IMPORTED_MODULE_1__["EmulatorState"](); - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - if (telemetry.Command === 'GetEmulatorState') { - _this.state = JSON.parse(atob(telemetry.Payload)); - } - }); - } - ControlsComponent.prototype.ngOnInit = function () { - }; - ControlsComponent.prototype.setBreakpoint = function (value) { - var telemetryRequest = new _models_telemetry_model__WEBPACK_IMPORTED_MODULE_3__["Telemetry"](); - telemetryRequest.Command = 'SetBreakpoint'; - // convert from hex to dec - var dec = parseInt(value, 16); - // set the decimal number as a parameter on the command - telemetryRequest.Parameter = dec.toString(); - this.telemetryService.sendCommand(telemetryRequest); - }; - ControlsComponent.prototype.startEmulator = function () { - console.log('start emulator called'); - this.telemetryService.sendStringCommand('Start'); - this.refreshAll(); - }; - ControlsComponent.prototype.stopEmulator = function () { - console.log('stop emulator called'); - this.telemetryService.sendStringCommand('Stop'); - this.refreshAll(); - }; - ControlsComponent.prototype.executeNext = function () { - console.log('execute next instruction called'); - this.telemetryService.sendStringCommand('ExecuteNext'); - this.refreshAll(); - }; - ControlsComponent.prototype.getCPUState = function () { - console.log('get CPU state called'); - this.telemetryService.sendStringCommand('GetCPUState'); - }; - ControlsComponent.prototype.getCIAState = function () { - console.log('get CIA state called'); - this.telemetryService.sendStringCommand('GetCIAState'); - }; - ControlsComponent.prototype.getEmulatorState = function () { - console.log('get Emulator state called'); - this.telemetryService.sendStringCommand('GetEmulatorState'); - }; - ControlsComponent.prototype.getMemoryContent = function () { - console.log('get Memory content called'); - this.telemetryService.sendStringCommand('GetMemoryContent'); - }; - ControlsComponent.prototype.refreshAll = function () { - var _this = this; - setTimeout(function () { - _this.telemetryService.sendStringCommand('GetCPUState'); - }, 50); - setTimeout(function () { - _this.telemetryService.sendStringCommand('GetCIAState'); - }, 75); - setTimeout(function () { - _this.telemetryService.sendStringCommand('GetEmulatorState'); - }, 100); - setTimeout(function () { - _this.telemetryService.sendStringCommand('GetMemoryContent'); - }, 125); - }; - ControlsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-controls', - template: __webpack_require__(/*! ./controls.component.html */ "./src/app/controls/controls.component.html"), - styles: [__webpack_require__(/*! ./controls.component.scss */ "./src/app/controls/controls.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_2__["TelemetryService"]]) - ], ControlsComponent); - return ControlsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/cpu/cpu.component.html": -/*!****************************************!*\ - !*** ./src/app/cpu/cpu.component.html ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n \n CPU\n Register states\n \n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
CPU Property {{element.Name}} Value {{element.Value}}
\n\n \n

\n\n

\n
\n
" - -/***/ }), - -/***/ "./src/app/cpu/cpu.component.scss": -/*!****************************************!*\ - !*** ./src/app/cpu/cpu.component.scss ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "table {\n width: 100%; }\n\n.mat-header-row {\n display: none; }\n\nmat-card {\n width: 300px;\n display: inline-block; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9jcHUvY3B1LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksV0FBVyxFQUFBOztBQUViO0VBQWlCLGFBQVksRUFBQTs7QUFFN0I7RUFDRSxZQUFZO0VBQ1oscUJBQXFCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9jcHUvY3B1LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsidGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5tYXQtaGVhZGVyLXJvdyB7ZGlzcGxheTpub25lO31cblxuICBtYXQtY2FyZCB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfSJdfQ== */" - -/***/ }), - -/***/ "./src/app/cpu/cpu.component.ts": -/*!**************************************!*\ - !*** ./src/app/cpu/cpu.component.ts ***! - \**************************************/ -/*! exports provided: CPUComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CPUComponent", function() { return CPUComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/tablehelper.service */ "./src/app/services/tablehelper.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var CPUComponent = /** @class */ (function () { - function CPUComponent(telemetryService, helper) { - var _this = this; - this.telemetryService = telemetryService; - this.helper = helper; - this.displayedColumns = ['name', 'value']; - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - if (telemetry.Command === 'GetCPUState') { - _this.dataSource = helper.convertToTableRows(JSON.parse(atob(telemetry.Payload))); - } - }); - } - CPUComponent.prototype.ngOnInit = function () { - }; - CPUComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-cpu', - template: __webpack_require__(/*! ./cpu.component.html */ "./src/app/cpu/cpu.component.html"), - styles: [__webpack_require__(/*! ./cpu.component.scss */ "./src/app/cpu/cpu.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__["TelemetryService"], _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__["TablehelperService"]]) - ], CPUComponent); - return CPUComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/emulator/emulator.component.html": -/*!**************************************************!*\ - !*** ./src/app/emulator/emulator.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n\n \n Emulator\n States\n \n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
Emulator State {{element.Name}} Value {{element.Value}}
\n\n\n \n

\n\n

\n
\n
\n\n\n\n" - -/***/ }), - -/***/ "./src/app/emulator/emulator.component.scss": -/*!**************************************************!*\ - !*** ./src/app/emulator/emulator.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "table {\n width: 100%; }\n\n.mat-header-row {\n display: none; }\n\nmat-card {\n width: 300px;\n display: inline-block; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9lbXVsYXRvci9lbXVsYXRvci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFdBQVcsRUFBQTs7QUFHYjtFQUFpQixhQUFZLEVBQUE7O0FBRTdCO0VBQ0UsWUFBWTtFQUNaLHFCQUFxQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvZW11bGF0b3IvZW11bGF0b3IuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJ0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAubWF0LWhlYWRlci1yb3cge2Rpc3BsYXk6bm9uZTt9XG5cbiAgbWF0LWNhcmQge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH0iXX0= */" - -/***/ }), - -/***/ "./src/app/emulator/emulator.component.ts": -/*!************************************************!*\ - !*** ./src/app/emulator/emulator.component.ts ***! - \************************************************/ -/*! exports provided: EmulatorComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmulatorComponent", function() { return EmulatorComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/tablehelper.service */ "./src/app/services/tablehelper.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var EmulatorComponent = /** @class */ (function () { - function EmulatorComponent(telemetryService, helper) { - var _this = this; - this.telemetryService = telemetryService; - this.helper = helper; - this.displayedColumns = ['name', 'value']; - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - if (telemetry.Command === 'GetEmulatorState') { - var emuState = JSON.parse(atob(telemetry.Payload)); - emuState.CycleCount += ' '; // HACK: force this variable to be a string to avoid hex conversion - _this.dataSource = helper.convertToTableRows(emuState); - } - }); - } - EmulatorComponent.prototype.ngOnInit = function () { - }; - EmulatorComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-emulator', - template: __webpack_require__(/*! ./emulator.component.html */ "./src/app/emulator/emulator.component.html"), - styles: [__webpack_require__(/*! ./emulator.component.scss */ "./src/app/emulator/emulator.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__["TelemetryService"], _services_tablehelper_service__WEBPACK_IMPORTED_MODULE_2__["TablehelperService"]]) - ], EmulatorComponent); - return EmulatorComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/logs/logs.component.html": -/*!******************************************!*\ - !*** ./src/app/logs/logs.component.html ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "

\n \n \n \n \n \n \n\n
\n {{ latestMessage }}\n\n

\n" - -/***/ }), - -/***/ "./src/app/logs/logs.component.scss": -/*!******************************************!*\ - !*** ./src/app/logs/logs.component.scss ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xvZ3MvbG9ncy5jb21wb25lbnQuc2NzcyJ9 */" - -/***/ }), - -/***/ "./src/app/logs/logs.component.ts": -/*!****************************************!*\ - !*** ./src/app/logs/logs.component.ts ***! - \****************************************/ -/*! exports provided: LogsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LogsComponent", function() { return LogsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var LogsComponent = /** @class */ (function () { - function LogsComponent(telemetryService) { - var _this = this; - this.telemetryService = telemetryService; - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - console.log(telemetry); - console.log(atob(telemetry.Payload)); - // console.log("message received"); - _this.latestMessage = atob(telemetry.Payload); - }); - } - LogsComponent.prototype.ngOnInit = function () { - }; - LogsComponent.prototype.startEmulator = function () { - console.log('start emulator called'); - this.telemetryService.sendStringCommand('Start'); - }; - LogsComponent.prototype.stopEmulator = function () { - console.log('stop emulator called'); - this.telemetryService.sendStringCommand('Stop'); - }; - LogsComponent.prototype.executeNext = function () { - console.log('execute next instruction called'); - this.telemetryService.sendStringCommand('ExecuteNext'); - }; - LogsComponent.prototype.getCPUState = function () { - console.log('get CPU state called'); - this.telemetryService.sendStringCommand('GetCPUState'); - }; - LogsComponent.prototype.getEmulatorState = function () { - console.log('get Emulator state called'); - this.telemetryService.sendStringCommand('GetEmulatorState'); - }; - LogsComponent.prototype.getMemoryContent = function () { - console.log('get Memory content called'); - this.telemetryService.sendStringCommand('GetMemoryContent'); - }; - LogsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-logs', - template: __webpack_require__(/*! ./logs.component.html */ "./src/app/logs/logs.component.html"), - styles: [__webpack_require__(/*! ./logs.component.scss */ "./src/app/logs/logs.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__["TelemetryService"]]) - ], LogsComponent); - return LogsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/memory/memory.component.html": -/*!**********************************************!*\ - !*** ./src/app/memory/memory.component.html ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\n\n \n Memory\n Program counter window\n \n\n\n\n\n\n
\n
\n
\n" - -/***/ }), - -/***/ "./src/app/memory/memory.component.scss": -/*!**********************************************!*\ - !*** ./src/app/memory/memory.component.scss ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "mat-card {\n width: 400px;\n display: inline-grid; }\n\n.current-pc-highlight {\n background-color: yellow;\n color: red; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9tZW1vcnkvbWVtb3J5LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksWUFBWTtFQUNaLG9CQUFvQixFQUFBOztBQUd4QjtFQUNNLHdCQUF3QjtFQUN4QixVQUFVLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9tZW1vcnkvbWVtb3J5LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsibWF0LWNhcmQge1xuICAgIHdpZHRoOiA0MDBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZ3JpZDtcbiAgfVxuXG4uY3VycmVudC1wYy1oaWdobGlnaHQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93O1xuICAgICAgY29sb3I6IHJlZDtcbiAgfSJdfQ== */" - -/***/ }), - -/***/ "./src/app/memory/memory.component.ts": -/*!********************************************!*\ - !*** ./src/app/memory/memory.component.ts ***! - \********************************************/ -/*! exports provided: MemoryComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MemoryComponent", function() { return MemoryComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/telemetry.service */ "./src/app/services/telemetry.service.ts"); -/* harmony import */ var _models_cpustate_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/cpustate.model */ "./src/app/models/cpustate.model.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var MemoryComponent = /** @class */ (function () { - function MemoryComponent(telemetryService) { - var _this = this; - this.telemetryService = telemetryService; - this.memoryContent = 'blank'; - this.cpuState = new _models_cpustate_model__WEBPACK_IMPORTED_MODULE_2__["CPUState"](); - telemetryService.getTelemetry().subscribe(function (t) { - var telemetry = JSON.parse(t); - if (telemetry.Command === 'GetCPUState') { - _this.cpuState = JSON.parse(atob(telemetry.Payload)); - } - if (telemetry.Command === 'GetMemoryContent') { - var byteCharacters = atob(telemetry.Payload); - var byteNumbers = new Array(byteCharacters.length); - for (var i = 0; i < byteCharacters.length; i++) { - byteNumbers[i] = byteCharacters.charCodeAt(i); - } - var byteArray = new Uint8Array(byteNumbers); - //console.log(byteArray); - var hexResult = ''; - var cnt = 0; - var windowSize = 100; - var windowStart = 0; - var windowEnd = 0; - windowStart = _this.cpuState.PC - windowSize; - while (windowStart % 16 !== 0) { - windowStart = windowStart - 1; - } - windowEnd = _this.cpuState.PC + windowSize; - while (windowEnd % 16 !== 15) { - windowEnd = windowEnd + 1; - } - for (var _i = 0, byteNumbers_1 = byteNumbers; _i < byteNumbers_1.length; _i++) { - var byte = byteNumbers_1[_i]; - // only print the window - if (cnt >= windowStart && cnt <= windowEnd) { - // highlight the current PC instruction - if (cnt === _this.cpuState.PC) { - hexResult += ''; - } - // tslint:disable-next-line:max-line-length - hexResult += (cnt % 16 ? ' ' : '
' + (1e7 + (cnt).toString(16)).slice(-8) + ' | ') + (1e7 + byteArray[cnt].toString(16)).slice(-2); - if (cnt === _this.cpuState.PC) { - hexResult += '
'; - } - } - cnt++; - } - _this.dataContainer.nativeElement.innerHTML = hexResult; - } - }); - } - MemoryComponent.prototype.loadData = function (data) { - this.dataContainer.nativeElement.innerHTML = data; - }; - MemoryComponent.prototype.ngOnInit = function () { - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('dataContainer'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], MemoryComponent.prototype, "dataContainer", void 0); - MemoryComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-memory', - template: __webpack_require__(/*! ./memory.component.html */ "./src/app/memory/memory.component.html"), - styles: [__webpack_require__(/*! ./memory.component.scss */ "./src/app/memory/memory.component.scss")] - }), - __metadata("design:paramtypes", [_services_telemetry_service__WEBPACK_IMPORTED_MODULE_1__["TelemetryService"]]) - ], MemoryComponent); - return MemoryComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/models/cpustate.model.ts": -/*!******************************************!*\ - !*** ./src/app/models/cpustate.model.ts ***! - \******************************************/ -/*! exports provided: CPUState */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CPUState", function() { return CPUState; }); -var CPUState = /** @class */ (function () { - function CPUState() { - } - return CPUState; -}()); - - - -/***/ }), - -/***/ "./src/app/models/emulatorstate.model.ts": -/*!***********************************************!*\ - !*** ./src/app/models/emulatorstate.model.ts ***! - \***********************************************/ -/*! exports provided: EmulatorState */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmulatorState", function() { return EmulatorState; }); -var EmulatorState = /** @class */ (function () { - function EmulatorState() { - } - return EmulatorState; -}()); - - - -/***/ }), - -/***/ "./src/app/models/tablerow.model.ts": -/*!******************************************!*\ - !*** ./src/app/models/tablerow.model.ts ***! - \******************************************/ -/*! exports provided: TableRow */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TableRow", function() { return TableRow; }); -var TableRow = /** @class */ (function () { - function TableRow() { - } - return TableRow; -}()); - - - -/***/ }), - -/***/ "./src/app/models/telemetry.model.ts": -/*!*******************************************!*\ - !*** ./src/app/models/telemetry.model.ts ***! - \*******************************************/ -/*! exports provided: Telemetry */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Telemetry", function() { return Telemetry; }); -var Telemetry = /** @class */ (function () { - function Telemetry() { - } - return Telemetry; -}()); - - - -/***/ }), - -/***/ "./src/app/services/tablehelper.service.ts": -/*!*************************************************!*\ - !*** ./src/app/services/tablehelper.service.ts ***! - \*************************************************/ -/*! exports provided: TablehelperService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TablehelperService", function() { return TablehelperService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _models_tablerow_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/tablerow.model */ "./src/app/models/tablerow.model.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var TablehelperService = /** @class */ (function () { - function TablehelperService() { - } - TablehelperService.prototype.convertToTableRows = function (input) { - return this.convertToTableRowsWithBlackList(input, Array()); - }; - TablehelperService.prototype.convertToTableRowsWithBlackList = function (input, blackList) { - var result = []; - // Step 1. Get all the object keys. - var properties = Object.keys(input); - // Step 3. Iterate throw all keys. - for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) { - var prop = properties_1[_i]; - if (!blackList.includes(prop)) { - var row = new _models_tablerow_model__WEBPACK_IMPORTED_MODULE_1__["TableRow"](); - row.Name = prop.toString(); - var value = input[prop]; - if (typeof (value) === 'number') { - value = value.toString(16); - } - row.Value = value; - result.push(row); - } - } - return result; - }; - TablehelperService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root' - }), - __metadata("design:paramtypes", []) - ], TablehelperService); - return TablehelperService; -}()); - - - -/***/ }), - -/***/ "./src/app/services/telemetry.service.ts": -/*!***********************************************!*\ - !*** ./src/app/services/telemetry.service.ts ***! - \***********************************************/ -/*! exports provided: TelemetryService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TelemetryService", function() { return TelemetryService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _websocket_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./websocket.service */ "./src/app/services/websocket.service.ts"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var _models_telemetry_model__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/telemetry.model */ "./src/app/models/telemetry.model.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - -var TelemetryService = /** @class */ (function () { - function TelemetryService(webSocket) { - this.webSocket = webSocket; - var openSubscriber = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscriber"].create(function () { return console.log('connection opened'); }); - this.observableSocket = this.webSocket.createObservableSocket('ws://localhost:8080/ws', openSubscriber); - } - TelemetryService.prototype.getTelemetry = function () { - return this.observableSocket; - }; - TelemetryService.prototype.sendStringCommand = function (command) { - var telemetryRequest = new _models_telemetry_model__WEBPACK_IMPORTED_MODULE_3__["Telemetry"](); - telemetryRequest.Command = command; - this.sendCommand(telemetryRequest); - }; - TelemetryService.prototype.sendCommand = function (request) { - this.webSocket.send(JSON.stringify(request)); - }; - TelemetryService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root' - }), - __metadata("design:paramtypes", [_websocket_service__WEBPACK_IMPORTED_MODULE_1__["WebsocketService"]]) - ], TelemetryService); - return TelemetryService; -}()); - - - -/***/ }), - -/***/ "./src/app/services/websocket.service.ts": -/*!***********************************************!*\ - !*** ./src/app/services/websocket.service.ts ***! - \***********************************************/ -/*! exports provided: WebsocketService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebsocketService", function() { return WebsocketService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - -var WebsocketService = /** @class */ (function () { - function WebsocketService() { - this.subject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"](); - } - WebsocketService.prototype.createObservableSocket = function (url, openSubscriber) { - var _this = this; - this.ws = new WebSocket(url); - new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (observer) { - _this.ws.onmessage = function (event) { return observer.next(event.data); }; - _this.ws.onerror = function (event) { return observer.error(event); }; - _this.ws.onclose = function (event) { return observer.complete(); }; - _this.ws.onopen = function (event) { - openSubscriber.next(); - openSubscriber.complete(); - }; - return function () { return _this.ws.close(); }; - }).subscribe(function (data) { _this.subject.next(data); console.log(data); }); - return this.subject; - }; - WebsocketService.prototype.send = function (message) { - this.ws.send(message); - }; - WebsocketService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root' - }) - ], WebsocketService); - return WebsocketService; -}()); - - - -/***/ }), - -/***/ "./src/environments/environment.ts": -/*!*****************************************!*\ - !*** ./src/environments/environment.ts ***! - \*****************************************/ -/*! exports provided: environment */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "environment", function() { return environment; }); -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. -var environment = { - production: false -}; -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/dist/zone-error'; // Included with Angular CLI. - - -/***/ }), - -/***/ "./src/main.ts": -/*!*********************!*\ - !*** ./src/main.ts ***! - \*********************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/fesm5/platform-browser-dynamic.js"); -/* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/app.module */ "./src/app/app.module.ts"); -/* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environments/environment */ "./src/environments/environment.ts"); - - - - -if (_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].production) { - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); -} -Object(_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__["platformBrowserDynamic"])().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]) - .catch(function (err) { return console.error(err); }); - - -/***/ }), - -/***/ 0: -/*!***************************!*\ - !*** multi ./src/main.ts ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! /app/src/main.ts */"./src/main.ts"); - - -/***/ }) - -},[[0,"runtime","vendor"]]]); -//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/main.js.map b/internals/WebUI/dist/WebUI/main.js.map deleted file mode 100644 index 1221b4d..0000000 --- a/internals/WebUI/dist/WebUI/main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/app-routing.module.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.scss","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/cia/cia.component.html","webpack:///./src/app/cia/cia.component.scss","webpack:///./src/app/cia/cia.component.ts","webpack:///./src/app/controls/controls.component.html","webpack:///./src/app/controls/controls.component.scss","webpack:///./src/app/controls/controls.component.ts","webpack:///./src/app/cpu/cpu.component.html","webpack:///./src/app/cpu/cpu.component.scss","webpack:///./src/app/cpu/cpu.component.ts","webpack:///./src/app/emulator/emulator.component.html","webpack:///./src/app/emulator/emulator.component.scss","webpack:///./src/app/emulator/emulator.component.ts","webpack:///./src/app/logs/logs.component.html","webpack:///./src/app/logs/logs.component.scss","webpack:///./src/app/logs/logs.component.ts","webpack:///./src/app/memory/memory.component.html","webpack:///./src/app/memory/memory.component.scss","webpack:///./src/app/memory/memory.component.ts","webpack:///./src/app/models/cpustate.model.ts","webpack:///./src/app/models/emulatorstate.model.ts","webpack:///./src/app/models/tablerow.model.ts","webpack:///./src/app/models/telemetry.model.ts","webpack:///./src/app/services/tablehelper.service.ts","webpack:///./src/app/services/telemetry.service.ts","webpack:///./src/app/services/websocket.service.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","module.exports = \"\\n \\n \\n \\n pets\\n \\n \\n\\n
\\n \\n \\n \\n \\n
\\n\\n\\n\"","module.exports = \".example-icon {\\n padding: 0 14px; }\\n\\n.example-spacer {\\n flex: 1 1 auto; }\\n\\napp-emulator, app-cpu {\\n margin-right: 20px; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9hcHAuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDSSxlQUFlLEVBQUE7O0FBR2pCO0VBQ0UsY0FBYyxFQUFBOztBQUdqQjtFQUNHLGtCQUFrQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvYXBwLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmV4YW1wbGUtaWNvbiB7XG4gICAgcGFkZGluZzogMCAxNHB4O1xuICB9XG5cbiAgLmV4YW1wbGUtc3BhY2VyIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgfVxuXG4gYXBwLWVtdWxhdG9yLCBhcHAtY3B1IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gIH0iXX0= */\"","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n title = 'WebUI';\n}\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LogsComponent } from './logs/logs.component';\nimport { WebsocketService } from './services/websocket.service';\nimport { TelemetryService } from './services/telemetry.service';\nimport { CPUComponent } from './cpu/cpu.component';\nimport { MemoryComponent } from './memory/memory.component';\nimport { EmulatorComponent } from './emulator/emulator.component';\nimport { MatTableModule } from '@angular/material/table';\nimport { ControlsComponent } from './controls/controls.component';\nimport {MatGridListModule} from '@angular/material/grid-list';\nimport {MatCardModule} from '@angular/material/card';\nimport { CiaComponent } from './cia/cia.component';\n\n\n@NgModule({\n declarations: [\n AppComponent,\n LogsComponent,\n CPUComponent,\n MemoryComponent,\n EmulatorComponent,\n ControlsComponent,\n CiaComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n MatToolbarModule,\n MatIconModule,\n MatButtonModule,\n MatTableModule,\n MatGridListModule,\n MatCardModule\n ],\n providers: [WebsocketService, TelemetryService],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","module.exports = \"\\n \\n CIA\\n Chip states\\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n
CIA Property {{element.Name}} Value {{element.Value}}
\\n\\n \\n

\\n\\n

\\n
\\n
\"","module.exports = \"table {\\n width: 100%; }\\n\\n.mat-header-row {\\n display: none; }\\n\\nmat-card {\\n width: 320px;\\n display: inline-block; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9jaWEvY2lhLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksV0FBVyxFQUFBOztBQUViO0VBQWlCLGFBQVksRUFBQTs7QUFFN0I7RUFDRSxZQUFZO0VBQ1oscUJBQXFCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9jaWEvY2lhLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsidGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5tYXQtaGVhZGVyLXJvdyB7ZGlzcGxheTpub25lO31cblxuICBtYXQtY2FyZCB7XG4gICAgd2lkdGg6IDMyMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfSJdfQ== */\"","import { Component, OnInit } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { TablehelperService } from '../services/tablehelper.service';\nimport { Telemetry } from '../models/telemetry.model';\n\n@Component({\n selector: 'app-cia',\n templateUrl: './cia.component.html',\n styleUrls: ['./cia.component.scss']\n})\nexport class CiaComponent implements OnInit {\n\n public displayedColumns: string[] = ['name', 'value'];\n public dataSource: any;\n\n constructor(private telemetryService: TelemetryService, private helper: TablehelperService) {\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n if (telemetry.Command === 'GetCIAState') {\n this.dataSource = helper.convertToTableRowsWithBlackList(JSON.parse(atob(telemetry.Payload)), ['Keyboard_matrix']);\n }\n });\n }\n\n ngOnInit() {\n }\n\n}\n","module.exports = \"

\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n\\n

\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2NvbnRyb2xzL2NvbnRyb2xzLmNvbXBvbmVudC5zY3NzIn0= */\"","import { Component, OnInit } from '@angular/core';\nimport { EmulatorState } from '../models/emulatorstate.model';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { Telemetry } from '../models/telemetry.model';\n\n@Component({\n selector: 'app-controls',\n templateUrl: './controls.component.html',\n styleUrls: ['./controls.component.scss']\n})\nexport class ControlsComponent implements OnInit {\n\n latestMessage: string;\n public state: EmulatorState;\n\n constructor(private telemetryService: TelemetryService) {\n this.state = new EmulatorState();\n\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n\n if (telemetry.Command === 'GetEmulatorState') {\n this.state = JSON.parse(atob(telemetry.Payload));\n }\n });\n }\n\n ngOnInit() {\n }\n\n setBreakpoint(value: string) {\n const telemetryRequest = new Telemetry();\n telemetryRequest.Command = 'SetBreakpoint';\n // convert from hex to dec\n const dec = parseInt(value, 16);\n // set the decimal number as a parameter on the command\n telemetryRequest.Parameter = dec.toString();\n this.telemetryService.sendCommand(telemetryRequest);\n }\n\n startEmulator() {\n console.log('start emulator called');\n this.telemetryService.sendStringCommand('Start');\n\n this.refreshAll();\n }\n\n stopEmulator() {\n console.log('stop emulator called');\n this.telemetryService.sendStringCommand('Stop');\n\n this.refreshAll();\n }\n\n executeNext() {\n console.log('execute next instruction called');\n this.telemetryService.sendStringCommand('ExecuteNext');\n\n this.refreshAll();\n }\n\n getCPUState() {\n console.log('get CPU state called');\n this.telemetryService.sendStringCommand('GetCPUState');\n }\n\n getCIAState() {\n console.log('get CIA state called');\n this.telemetryService.sendStringCommand('GetCIAState');\n }\n\n getEmulatorState() {\n console.log('get Emulator state called');\n this.telemetryService.sendStringCommand('GetEmulatorState');\n }\n\n getMemoryContent() {\n console.log('get Memory content called');\n this.telemetryService.sendStringCommand('GetMemoryContent');\n }\n\n refreshAll() {\n setTimeout(() => {\n this.telemetryService.sendStringCommand('GetCPUState');\n }, 50);\n\n setTimeout(() => {\n this.telemetryService.sendStringCommand('GetCIAState');\n }, 75);\n\n setTimeout(() => {\n this.telemetryService.sendStringCommand('GetEmulatorState');\n }, 100);\n\n setTimeout(() => {\n this.telemetryService.sendStringCommand('GetMemoryContent');\n }, 125);\n }\n\n}\n","module.exports = \"\\n \\n CPU\\n Register states\\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n
CPU Property {{element.Name}} Value {{element.Value}}
\\n\\n \\n

\\n\\n

\\n
\\n
\"","module.exports = \"table {\\n width: 100%; }\\n\\n.mat-header-row {\\n display: none; }\\n\\nmat-card {\\n width: 300px;\\n display: inline-block; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9jcHUvY3B1LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksV0FBVyxFQUFBOztBQUViO0VBQWlCLGFBQVksRUFBQTs7QUFFN0I7RUFDRSxZQUFZO0VBQ1oscUJBQXFCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9jcHUvY3B1LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsidGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5tYXQtaGVhZGVyLXJvdyB7ZGlzcGxheTpub25lO31cblxuICBtYXQtY2FyZCB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfSJdfQ== */\"","import { Component, OnInit } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { Telemetry } from '../models/telemetry.model';\nimport { CPUState } from '../models/cpustate.model';\nimport { TableRow } from '../models/tablerow.model';\nimport { TablehelperService } from '../services/tablehelper.service';\n\n@Component({\n selector: 'app-cpu',\n templateUrl: './cpu.component.html',\n styleUrls: ['./cpu.component.scss']\n})\nexport class CPUComponent implements OnInit {\n\n public displayedColumns: string[] = ['name', 'value'];\n public dataSource: any;\n\n constructor(private telemetryService: TelemetryService, private helper: TablehelperService) {\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n if (telemetry.Command === 'GetCPUState') {\n this.dataSource = helper.convertToTableRows(JSON.parse(atob(telemetry.Payload)));\n }\n });\n }\n\n ngOnInit() {\n }\n\n}\n","module.exports = \"\\n\\n \\n Emulator\\n States\\n \\n\\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n \\n
Emulator State {{element.Name}} Value {{element.Value}}
\\n\\n\\n \\n

\\n\\n

\\n
\\n
\\n\\n\\n\\n\"","module.exports = \"table {\\n width: 100%; }\\n\\n.mat-header-row {\\n display: none; }\\n\\nmat-card {\\n width: 300px;\\n display: inline-block; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9lbXVsYXRvci9lbXVsYXRvci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFdBQVcsRUFBQTs7QUFHYjtFQUFpQixhQUFZLEVBQUE7O0FBRTdCO0VBQ0UsWUFBWTtFQUNaLHFCQUFxQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvZW11bGF0b3IvZW11bGF0b3IuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJ0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAubWF0LWhlYWRlci1yb3cge2Rpc3BsYXk6bm9uZTt9XG5cbiAgbWF0LWNhcmQge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH0iXX0= */\"","import { Component, OnInit } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { Telemetry } from '../models/telemetry.model';\nimport { EmulatorState } from '../models/emulatorstate.model';\nimport { TablehelperService } from '../services/tablehelper.service';\n\n@Component({\n selector: 'app-emulator',\n templateUrl: './emulator.component.html',\n styleUrls: ['./emulator.component.scss']\n})\nexport class EmulatorComponent implements OnInit {\n\n public displayedColumns: string[] = ['name', 'value'];\n public dataSource: any;\n\n constructor(private telemetryService: TelemetryService, private helper: TablehelperService) {\n\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n\n if (telemetry.Command === 'GetEmulatorState') {\n const emuState: EmulatorState = JSON.parse(atob(telemetry.Payload));\n emuState.CycleCount += ' '; // HACK: force this variable to be a string to avoid hex conversion\n this.dataSource = helper.convertToTableRows(emuState);\n }\n });\n }\n\n ngOnInit() {\n }\n}\n","module.exports = \"

\\n \\n \\n \\n \\n \\n \\n\\n
\\n {{ latestMessage }}\\n\\n

\\n\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xvZ3MvbG9ncy5jb21wb25lbnQuc2NzcyJ9 */\"","import { Component, OnInit } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { Telemetry } from '../models/telemetry.model';\n\n@Component({\n selector: 'app-logs',\n templateUrl: './logs.component.html',\n styleUrls: ['./logs.component.scss']\n})\nexport class LogsComponent implements OnInit {\n\n latestMessage: string;\n\n constructor(private telemetryService: TelemetryService) {\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n console.log(telemetry);\n console.log(atob(telemetry.Payload));\n // console.log(\"message received\");\n this.latestMessage = atob(telemetry.Payload);\n });\n }\n\n ngOnInit() {\n }\n\n startEmulator() {\n console.log('start emulator called');\n this.telemetryService.sendStringCommand('Start');\n }\n\n stopEmulator() {\n console.log('stop emulator called');\n this.telemetryService.sendStringCommand('Stop');\n }\n\n executeNext() {\n console.log('execute next instruction called');\n this.telemetryService.sendStringCommand('ExecuteNext');\n }\n\n getCPUState() {\n console.log('get CPU state called');\n this.telemetryService.sendStringCommand('GetCPUState');\n }\n\n getEmulatorState() {\n console.log('get Emulator state called');\n this.telemetryService.sendStringCommand('GetEmulatorState');\n }\n\n getMemoryContent() {\n console.log('get Memory content called');\n this.telemetryService.sendStringCommand('GetMemoryContent');\n }\n}\n","module.exports = \"\\n\\n \\n Memory\\n Program counter window\\n \\n\\n\\n\\n\\n\\n
\\n
\\n
\\n\"","module.exports = \"mat-card {\\n width: 400px;\\n display: inline-grid; }\\n\\n.current-pc-highlight {\\n background-color: yellow;\\n color: red; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2FwcC9tZW1vcnkvbWVtb3J5LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksWUFBWTtFQUNaLG9CQUFvQixFQUFBOztBQUd4QjtFQUNNLHdCQUF3QjtFQUN4QixVQUFVLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9tZW1vcnkvbWVtb3J5LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsibWF0LWNhcmQge1xuICAgIHdpZHRoOiA0MDBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZ3JpZDtcbiAgfVxuXG4uY3VycmVudC1wYy1oaWdobGlnaHQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93O1xuICAgICAgY29sb3I6IHJlZDtcbiAgfSJdfQ== */\"","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { Telemetry } from '../models/telemetry.model';\nimport { CPUState } from '../models/cpustate.model';\n\n@Component({\n selector: 'app-memory',\n templateUrl: './memory.component.html',\n styleUrls: ['./memory.component.scss']\n})\nexport class MemoryComponent implements OnInit {\n\n public memoryContent = 'blank';\n public cpuState: CPUState;\n\n @ViewChild('dataContainer') dataContainer: ElementRef;\n\n loadData(data) {\n this.dataContainer.nativeElement.innerHTML = data;\n }\n\n constructor(private telemetryService: TelemetryService) {\n\n this.cpuState = new CPUState();\n\n telemetryService.getTelemetry().subscribe((t: string) => {\n const telemetry: Telemetry = JSON.parse(t);\n\n if (telemetry.Command === 'GetCPUState') {\n this.cpuState = JSON.parse(atob(telemetry.Payload));\n }\n\n if (telemetry.Command === 'GetMemoryContent') {\n\n let byteCharacters = atob(telemetry.Payload);\n let byteNumbers = new Array(byteCharacters.length);\n\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n let byteArray = new Uint8Array(byteNumbers);\n\n //console.log(byteArray);\n let hexResult = '';\n let cnt = 0;\n let windowSize = 100;\n let windowStart = 0;\n let windowEnd = 0;\n\n windowStart = this.cpuState.PC - windowSize;\n while (windowStart % 16 !== 0) {\n windowStart = windowStart - 1;\n }\n windowEnd = this.cpuState.PC + windowSize;\n while (windowEnd % 16 !== 15) {\n windowEnd = windowEnd + 1;\n }\n\n for (let byte of byteNumbers) {\n\n // only print the window\n if (cnt >= windowStart && cnt <= windowEnd) {\n\n // highlight the current PC instruction\n if (cnt === this.cpuState.PC) {\n hexResult += '';\n }\n\n // tslint:disable-next-line:max-line-length\n hexResult += (cnt % 16 ? ' ' : '
' + (1e7 + (cnt).toString(16)).slice(-8) + ' | ') + (1e7 + byteArray[cnt].toString(16)).slice(-2);\n\n if (cnt === this.cpuState.PC) {\n hexResult += '
';\n }\n }\n cnt++;\n }\n\n this.dataContainer.nativeElement.innerHTML = hexResult;\n }\n });\n }\n\n ngOnInit() {\n }\n\n}\n","export class CPUState {\n A: number;\n Y: number;\n X: number;\n S: number;\n P: number;\n PC: number;\n SP: number;\n SP_LOW: number;\n SP_HIGH: number;\n InstructionType: number;\n InstructionName: string;\n}\n","export class EmulatorState {\n Delay: string;\n CycleCount: string;\n PauseFlag: boolean;\n Debug: boolean;\n Test: boolean;\n BreakAddr: number;\n}\n","export class TableRow {\n Name: string;\n Value: string;\n}","export class Telemetry {\n Command: string;\n Parameter: string;\n Payload: any;\n}\n","import { Injectable } from '@angular/core';\nimport { TableRow } from '../models/tablerow.model';\nimport { convertActionBinding } from '@angular/compiler/src/compiler_util/expression_converter';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TablehelperService {\n\n constructor() { }\n\n public convertToTableRows(input: any): TableRow[] {\n return this.convertToTableRowsWithBlackList(input, Array());\n }\n\n public convertToTableRowsWithBlackList(input: any, blackList: string[]): TableRow[] {\n\n let result = [];\n\n // Step 1. Get all the object keys.\n const properties = Object.keys(input);\n // Step 3. Iterate throw all keys.\n for (const prop of properties) {\n if (!blackList.includes(prop)) {\n const row = new TableRow();\n row.Name = prop.toString();\n\n let value = input[prop];\n\n if (typeof (value) === 'number') {\n value = value.toString(16);\n }\n\n row.Value = value;\n result.push(row);\n }\n }\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { WebsocketService } from './websocket.service';\nimport { Observable, Subscriber, observable, Subject } from 'rxjs';\nimport { map, filter, scan } from 'rxjs/operators';\nimport { Telemetry } from '../models/telemetry.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TelemetryService {\n\n observableSocket: Subject;\n\n constructor(private webSocket: WebsocketService) {\n const openSubscriber = Subscriber.create(() => console.log('connection opened'));\n this.observableSocket = this.webSocket.createObservableSocket('ws://localhost:8080/ws', openSubscriber);\n }\n getTelemetry(): Subject {\n return this.observableSocket;\n }\n\n sendStringCommand(command: string) {\n const telemetryRequest = new Telemetry();\n telemetryRequest.Command = command;\n this.sendCommand(telemetryRequest);\n }\n\n sendCommand(request: Telemetry) {\n this.webSocket.send(JSON.stringify(request));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subscriber, Observable, Subject } from 'rxjs';\nimport { Telemetry } from '../models/telemetry.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WebsocketService {\n\n private ws: WebSocket;\n private observable: Observable;\n private subject: Subject = new Subject();\n\n createObservableSocket(url: string, openSubscriber: Subscriber): Subject {\n this.ws = new WebSocket(url);\n new Observable(observer => {\n this.ws.onmessage = event => observer.next(event.data);\n this.ws.onerror = event => observer.error(event);\n this.ws.onclose = event => observer.complete();\n this.ws.onopen = event => {\n openSubscriber.next();\n openSubscriber.complete();\n };\n\n return () => this.ws.close();\n }).subscribe((data) => { this.subject.next(data); console.log(data); });\n\n return this.subject;\n }\n\n send(message: any) {\n this.ws.send(message);\n }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"sourceRoot":""} \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/polyfills.js b/internals/WebUI/dist/WebUI/polyfills.js deleted file mode 100644 index a531436..0000000 --- a/internals/WebUI/dist/WebUI/polyfills.js +++ /dev/null @@ -1,5811 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["polyfills"],{ - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js": -/*!**************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \**************************************************************************************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/es7/reflect */ "./node_modules/core-js/es7/reflect.js"); -/* harmony import */ var core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0__); -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - - - -/***/ }), - -/***/ "./node_modules/core-js/es7/reflect.js": -/*!*********************************************!*\ - !*** ./node_modules/core-js/es7/reflect.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../modules/es7.reflect.define-metadata */ "./node_modules/core-js/modules/es7.reflect.define-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.delete-metadata */ "./node_modules/core-js/modules/es7.reflect.delete-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-metadata */ "./node_modules/core-js/modules/es7.reflect.get-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-metadata-keys */ "./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-own-metadata */ "./node_modules/core-js/modules/es7.reflect.get-own-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-own-metadata-keys */ "./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js"); -__webpack_require__(/*! ../modules/es7.reflect.has-metadata */ "./node_modules/core-js/modules/es7.reflect.has-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.has-own-metadata */ "./node_modules/core-js/modules/es7.reflect.has-own-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.metadata */ "./node_modules/core-js/modules/es7.reflect.metadata.js"); -module.exports = __webpack_require__(/*! ../modules/_core */ "./node_modules/core-js/modules/_core.js").Reflect; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_a-function.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_a-function.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_an-instance.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_an-instance.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name, forbiddenField) { - if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { - throw TypeError(name + ': incorrect invocation!'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_an-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_an-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-from-iterable.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-from-iterable.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); - -module.exports = function (iter, ITERATOR) { - var result = []; - forOf(iter, false, result.push, result, ITERATOR); - return result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-includes.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/modules/_array-includes.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// false -> Array#indexOf -// true -> Array#includes -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/core-js/modules/_to-absolute-index.js"); -module.exports = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-methods.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_array-methods.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var asc = __webpack_require__(/*! ./_array-species-create */ "./node_modules/core-js/modules/_array-species-create.js"); -module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - for (;length > index; index++) if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - if (TYPE) { - if (IS_MAP) result[index] = res; // map - else if (res) switch (TYPE) { - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if (IS_EVERY) return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-species-constructor.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-species-constructor.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var isArray = __webpack_require__(/*! ./_is-array */ "./node_modules/core-js/modules/_is-array.js"); -var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('species'); - -module.exports = function (original) { - var C; - if (isArray(original)) { - C = original.constructor; - // cross-realm fallback - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } return C === undefined ? Array : C; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-species-create.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-species-create.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ "./node_modules/core-js/modules/_array-species-constructor.js"); - -module.exports = function (original, length) { - return new (speciesConstructor(original))(length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_classof.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_classof.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// getting tag from 19.1.3.6 Object.prototype.toString() -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('toStringTag'); -// ES3 wrong here -var ARG = cof(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (e) { /* empty */ } -}; - -module.exports = function (it) { - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_cof.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_cof.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection-strong.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_collection-strong.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var create = __webpack_require__(/*! ./_object-create */ "./node_modules/core-js/modules/_object-create.js"); -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var $iterDefine = __webpack_require__(/*! ./_iter-define */ "./node_modules/core-js/modules/_iter-define.js"); -var step = __webpack_require__(/*! ./_iter-step */ "./node_modules/core-js/modules/_iter-step.js"); -var setSpecies = __webpack_require__(/*! ./_set-species */ "./node_modules/core-js/modules/_set-species.js"); -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var fastKey = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js").fastKey; -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var SIZE = DESCRIPTORS ? '_s' : 'size'; - -var getEntry = function (that, key) { - // fast case - var index = fastKey(key); - var entry; - if (index !== 'F') return that._i[index]; - // frozen object case - for (entry = that._f; entry; entry = entry.n) { - if (entry.k == key) return entry; - } -}; - -module.exports = { - getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; // collection type - that._i = create(null); // index - that._f = undefined; // first entry - that._l = undefined; // last entry - that[SIZE] = 0; // size - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear() { - for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { - entry.r = true; - if (entry.p) entry.p = entry.p.n = undefined; - delete data[entry.i]; - } - that._f = that._l = undefined; - that[SIZE] = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function (key) { - var that = validate(this, NAME); - var entry = getEntry(that, key); - if (entry) { - var next = entry.n; - var prev = entry.p; - delete that._i[entry.i]; - entry.r = true; - if (prev) prev.n = next; - if (next) next.p = prev; - if (that._f == entry) that._f = next; - if (that._l == entry) that._l = prev; - that[SIZE]--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /* , that = undefined */) { - validate(this, NAME); - var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); - var entry; - while (entry = entry ? entry.n : this._f) { - f(entry.v, entry.k, this); - // revert to the last existing entry - while (entry && entry.r) entry = entry.p; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key) { - return !!getEntry(validate(this, NAME), key); - } - }); - if (DESCRIPTORS) dP(C.prototype, 'size', { - get: function () { - return validate(this, NAME)[SIZE]; - } - }); - return C; - }, - def: function (that, key, value) { - var entry = getEntry(that, key); - var prev, index; - // change existing entry - if (entry) { - entry.v = value; - // create new entry - } else { - that._l = entry = { - i: index = fastKey(key, true), // <- index - k: key, // <- key - v: value, // <- value - p: prev = that._l, // <- previous entry - n: undefined, // <- next entry - r: false // <- removed - }; - if (!that._f) that._f = entry; - if (prev) prev.n = entry; - that[SIZE]++; - // add to index - if (index !== 'F') that._i[index] = entry; - } return that; - }, - getEntry: getEntry, - setStrong: function (C, NAME, IS_MAP) { - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - $iterDefine(C, NAME, function (iterated, kind) { - this._t = validate(iterated, NAME); // target - this._k = kind; // kind - this._l = undefined; // previous - }, function () { - var that = this; - var kind = that._k; - var entry = that._l; - // revert to the last existing entry - while (entry && entry.r) entry = entry.p; - // get next entry - if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { - // or finish the iteration - that._t = undefined; - return step(1); - } - // return step by kind - if (kind == 'keys') return step(0, entry.k); - if (kind == 'values') return step(0, entry.v); - return step(0, [entry.k, entry.v]); - }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(NAME); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection-weak.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/_collection-weak.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var getWeak = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js").getWeak; -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var createArrayMethod = __webpack_require__(/*! ./_array-methods */ "./node_modules/core-js/modules/_array-methods.js"); -var $has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var arrayFind = createArrayMethod(5); -var arrayFindIndex = createArrayMethod(6); -var id = 0; - -// fallback for uncaught frozen keys -var uncaughtFrozenStore = function (that) { - return that._l || (that._l = new UncaughtFrozenStore()); -}; -var UncaughtFrozenStore = function () { - this.a = []; -}; -var findUncaughtFrozen = function (store, key) { - return arrayFind(store.a, function (it) { - return it[0] === key; - }); -}; -UncaughtFrozenStore.prototype = { - get: function (key) { - var entry = findUncaughtFrozen(this, key); - if (entry) return entry[1]; - }, - has: function (key) { - return !!findUncaughtFrozen(this, key); - }, - set: function (key, value) { - var entry = findUncaughtFrozen(this, key); - if (entry) entry[1] = value; - else this.a.push([key, value]); - }, - 'delete': function (key) { - var index = arrayFindIndex(this.a, function (it) { - return it[0] === key; - }); - if (~index) this.a.splice(index, 1); - return !!~index; - } -}; - -module.exports = { - getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; // collection type - that._i = id++; // collection id - that._l = undefined; // leak store for uncaught frozen objects - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.3.3.2 WeakMap.prototype.delete(key) - // 23.4.3.3 WeakSet.prototype.delete(value) - 'delete': function (key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); - return data && $has(data, this._i) && delete data[this._i]; - }, - // 23.3.3.4 WeakMap.prototype.has(key) - // 23.4.3.4 WeakSet.prototype.has(value) - has: function has(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); - return data && $has(data, this._i); - } - }); - return C; - }, - def: function (that, key, value) { - var data = getWeak(anObject(key), true); - if (data === true) uncaughtFrozenStore(that).set(key, value); - else data[that._i] = value; - return that; - }, - ufstore: uncaughtFrozenStore -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_collection.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var meta = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var fails = __webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js"); -var $iterDetect = __webpack_require__(/*! ./_iter-detect */ "./node_modules/core-js/modules/_iter-detect.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ "./node_modules/core-js/modules/_inherit-if-required.js"); - -module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { - var Base = global[NAME]; - var C = Base; - var ADDER = IS_MAP ? 'set' : 'add'; - var proto = C && C.prototype; - var O = {}; - var fixMethod = function (KEY) { - var fn = proto[KEY]; - redefine(proto, KEY, - KEY == 'delete' ? function (a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a) { - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } - : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; } - ); - }; - if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { - new C().entries().next(); - }))) { - // create collection constructor - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - meta.NEED = true; - } else { - var instance = new C(); - // early implementations not supports chaining - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false - var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); - // most early implementations doesn't supports iterables, most modern - not close it correctly - var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new - // for early implementations -0 and +0 not the same - var BUGGY_ZERO = !IS_WEAK && fails(function () { - // V8 ~ Chromium 42- fails only with 5+ elements - var $instance = new C(); - var index = 5; - while (index--) $instance[ADDER](index, index); - return !$instance.has(-0); - }); - if (!ACCEPT_ITERABLES) { - C = wrapper(function (target, iterable) { - anInstance(target, C, NAME); - var that = inheritIfRequired(new Base(), target, C); - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - // weak collections should not contains .clear method - if (IS_WEAK && proto.clear) delete proto.clear; - } - - setToStringTag(C, NAME); - - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - - if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); - - return C; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_core.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_core.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var core = module.exports = { version: '2.6.12' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_ctx.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_ctx.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/core-js/modules/_a-function.js"); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_defined.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_defined.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_descriptors.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_descriptors.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_dom-create.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_dom-create.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var document = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_enum-bug-keys.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_enum-bug-keys.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// IE 8- don't enum bug keys -module.exports = ( - 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' -).split(','); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_export.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_export.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var core = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); - var key, own, out, exp; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if (target) redefine(target, key, out, type & $export.U); - // export - if (exports[key] != out) hide(exports, key, exp); - if (IS_PROTO && expProto[key] != out) expProto[key] = out; - } -}; -global.core = core; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_fails.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/modules/_fails.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_for-of.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_for-of.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var call = __webpack_require__(/*! ./_iter-call */ "./node_modules/core-js/modules/_iter-call.js"); -var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ "./node_modules/core-js/modules/_is-array-iter.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ "./node_modules/core-js/modules/core.get-iterator-method.js"); -var BREAK = {}; -var RETURN = {}; -var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { - var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); - var f = ctx(fn, that, entries ? 2 : 1); - var index = 0; - var length, step, iterator, result; - if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); - // fast case for arrays with default iterator - if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if (result === BREAK || result === RETURN) return result; - } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { - result = call(iterator, f, step.value, entries); - if (result === BREAK || result === RETURN) return result; - } -}; -exports.BREAK = BREAK; -exports.RETURN = RETURN; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_function-to-string.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/_function-to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('native-function-to-string', Function.toString); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_global.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_global.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_has.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_has.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_hide.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_hide.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_html.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_html.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var document = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").document; -module.exports = document && document.documentElement; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_ie8-dom-define.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/modules/_ie8-dom-define.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") && !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ "./node_modules/core-js/modules/_dom-create.js")('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_inherit-if-required.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_inherit-if-required.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var setPrototypeOf = __webpack_require__(/*! ./_set-proto */ "./node_modules/core-js/modules/_set-proto.js").set; -module.exports = function (that, target, C) { - var S = target.constructor; - var P; - if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { - setPrototypeOf(that, P); - } return that; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iobject.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_iobject.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-array-iter.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_is-array-iter.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// check on default Array iterator -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var ArrayProto = Array.prototype; - -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-array.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_is-array.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.2.2 IsArray(argument) -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -module.exports = Array.isArray || function isArray(arg) { - return cof(arg) == 'Array'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_is-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-call.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-call.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// call something on iterator step with safe closing on error -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -module.exports = function (iterator, fn, value, entries) { - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (e) { - var ret = iterator['return']; - if (ret !== undefined) anObject(ret.call(iterator)); - throw e; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-create.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-create.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var create = __webpack_require__(/*! ./_object-create */ "./node_modules/core-js/modules/_object-create.js"); -var descriptor = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -__webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js")(IteratorPrototype, __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'), function () { return this; }); - -module.exports = function (Constructor, NAME, next) { - Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); - setToStringTag(Constructor, NAME + ' Iterator'); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-define.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-define.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/core-js/modules/_library.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -var $iterCreate = __webpack_require__(/*! ./_iter-create */ "./node_modules/core-js/modules/_iter-create.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` -var FF_ITERATOR = '@@iterator'; -var KEYS = 'keys'; -var VALUES = 'values'; - -var returnThis = function () { return this; }; - -module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { - $iterCreate(Constructor, NAME, next); - var getMethod = function (kind) { - if (!BUGGY && kind in proto) return proto[kind]; - switch (kind) { - case KEYS: return function keys() { return new Constructor(this, kind); }; - case VALUES: return function values() { return new Constructor(this, kind); }; - } return function entries() { return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator'; - var DEF_VALUES = DEFAULT == VALUES; - var VALUES_BUG = false; - var proto = Base.prototype; - var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); - var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; - var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; - var methods, key, IteratorPrototype; - // Fix native - if ($anyNative) { - IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); - if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // fix for some old engines - if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); - } - } - // fix Array#{values, @@iterator}.name in V8 / FF - if (DEF_VALUES && $native && $native.name !== VALUES) { - VALUES_BUG = true; - $default = function values() { return $native.call(this); }; - } - // Define iterator - if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if (DEFAULT) { - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if (FORCED) for (key in methods) { - if (!(key in proto)) redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-detect.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-detect.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var SAFE_CLOSING = false; - -try { - var riter = [7][ITERATOR](); - riter['return'] = function () { SAFE_CLOSING = true; }; - // eslint-disable-next-line no-throw-literal - Array.from(riter, function () { throw 2; }); -} catch (e) { /* empty */ } - -module.exports = function (exec, skipClosing) { - if (!skipClosing && !SAFE_CLOSING) return false; - var safe = false; - try { - var arr = [7]; - var iter = arr[ITERATOR](); - iter.next = function () { return { done: safe = true }; }; - arr[ITERATOR] = function () { return iter; }; - exec(arr); - } catch (e) { /* empty */ } - return safe; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-step.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-step.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (done, value) { - return { value: value, done: !!done }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iterators.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iterators.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_library.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_library.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_meta.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_meta.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var META = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js")('meta'); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var setDesc = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var id = 0; -var isExtensible = Object.isExtensible || function () { - return true; -}; -var FREEZE = !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return isExtensible(Object.preventExtensions({})); -}); -var setMeta = function (it) { - setDesc(it, META, { value: { - i: 'O' + ++id, // object ID - w: {} // weak collections IDs - } }); -}; -var fastKey = function (it, create) { - // return primitive with prefix - if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return 'F'; - // not necessary to add metadata - if (!create) return 'E'; - // add missing metadata - setMeta(it); - // return object ID - } return it[META].i; -}; -var getWeak = function (it, create) { - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return true; - // not necessary to add metadata - if (!create) return false; - // add missing metadata - setMeta(it); - // return hash weak collections IDs - } return it[META].w; -}; -// add metadata on freeze-family methods calling -var onFreeze = function (it) { - if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); - return it; -}; -var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_metadata.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_metadata.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var Map = __webpack_require__(/*! ./es6.map */ "./node_modules/core-js/modules/es6.map.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var shared = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('metadata'); -var store = shared.store || (shared.store = new (__webpack_require__(/*! ./es6.weak-map */ "./node_modules/core-js/modules/es6.weak-map.js"))()); - -var getOrCreateMetadataMap = function (target, targetKey, create) { - var targetMetadata = store.get(target); - if (!targetMetadata) { - if (!create) return undefined; - store.set(target, targetMetadata = new Map()); - } - var keyMetadata = targetMetadata.get(targetKey); - if (!keyMetadata) { - if (!create) return undefined; - targetMetadata.set(targetKey, keyMetadata = new Map()); - } return keyMetadata; -}; -var ordinaryHasOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? false : metadataMap.has(MetadataKey); -}; -var ordinaryGetOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); -}; -var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) { - getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); -}; -var ordinaryOwnMetadataKeys = function (target, targetKey) { - var metadataMap = getOrCreateMetadataMap(target, targetKey, false); - var keys = []; - if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); }); - return keys; -}; -var toMetaKey = function (it) { - return it === undefined || typeof it == 'symbol' ? it : String(it); -}; -var exp = function (O) { - $export($export.S, 'Reflect', O); -}; - -module.exports = { - store: store, - map: getOrCreateMetadataMap, - has: ordinaryHasOwnMetadata, - get: ordinaryGetOwnMetadata, - set: ordinaryDefineOwnMetadata, - keys: ordinaryOwnMetadataKeys, - key: toMetaKey, - exp: exp -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-assign.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_object-assign.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 19.1.2.1 Object.assign(target, source, ...) -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/core-js/modules/_object-keys.js"); -var gOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/core-js/modules/_object-gops.js"); -var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/core-js/modules/_object-pie.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var $assign = Object.assign; - -// should work with symbols and should have deterministic property order (V8 bug) -module.exports = !$assign || __webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - var A = {}; - var B = {}; - // eslint-disable-next-line no-undef - var S = Symbol(); - var K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function (k) { B[k] = k; }); - return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; -}) ? function assign(target, source) { // eslint-disable-line no-unused-vars - var T = toObject(target); - var aLen = arguments.length; - var index = 1; - var getSymbols = gOPS.f; - var isEnum = pIE.f; - while (aLen > index) { - var S = IObject(arguments[index++]); - var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); - var length = keys.length; - var j = 0; - var key; - while (length > j) { - key = keys[j++]; - if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key]; - } - } return T; -} : $assign; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-create.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_object-create.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var dPs = __webpack_require__(/*! ./_object-dps */ "./node_modules/core-js/modules/_object-dps.js"); -var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/core-js/modules/_enum-bug-keys.js"); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); -var Empty = function () { /* empty */ }; -var PROTOTYPE = 'prototype'; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = __webpack_require__(/*! ./_dom-create */ "./node_modules/core-js/modules/_dom-create.js")('iframe'); - var i = enumBugKeys.length; - var lt = '<'; - var gt = '>'; - var iframeDocument; - iframe.style.display = 'none'; - __webpack_require__(/*! ./_html */ "./node_modules/core-js/modules/_html.js").appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; - return createDict(); -}; - -module.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = createDict(); - return Properties === undefined ? result : dPs(result, Properties); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-dp.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-dp.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/core-js/modules/_ie8-dom-define.js"); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/core-js/modules/_to-primitive.js"); -var dP = Object.defineProperty; - -exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-dps.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-dps.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/core-js/modules/_object-keys.js"); - -module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = getKeys(Properties); - var length = keys.length; - var i = 0; - var P; - while (length > i) dP.f(O, P = keys[i++], Properties[P]); - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gopd.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gopd.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/core-js/modules/_object-pie.js"); -var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/core-js/modules/_to-primitive.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/core-js/modules/_ie8-dom-define.js"); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gops.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gops.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gpo.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gpo.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); -var ObjectProto = Object.prototype; - -module.exports = Object.getPrototypeOf || function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } return O instanceof Object ? ObjectProto : null; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-keys-internal.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/modules/_object-keys-internal.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var arrayIndexOf = __webpack_require__(/*! ./_array-includes */ "./node_modules/core-js/modules/_array-includes.js")(false); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); - -module.exports = function (object, names) { - var O = toIObject(object); - var i = 0; - var result = []; - var key; - for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-keys.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-keys.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = __webpack_require__(/*! ./_object-keys-internal */ "./node_modules/core-js/modules/_object-keys-internal.js"); -var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/core-js/modules/_enum-bug-keys.js"); - -module.exports = Object.keys || function keys(O) { - return $keys(O, enumBugKeys); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-pie.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-pie.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_property-desc.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_property-desc.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_redefine-all.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/modules/_redefine-all.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -module.exports = function (target, src, safe) { - for (var key in src) redefine(target, key, src[key], safe); - return target; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_redefine.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_redefine.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var SRC = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js")('src'); -var $toString = __webpack_require__(/*! ./_function-to-string */ "./node_modules/core-js/modules/_function-to-string.js"); -var TO_STRING = 'toString'; -var TPL = ('' + $toString).split(TO_STRING); - -__webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js").inspectSource = function (it) { - return $toString.call(it); -}; - -(module.exports = function (O, key, val, safe) { - var isFunction = typeof val == 'function'; - if (isFunction) has(val, 'name') || hide(val, 'name', key); - if (O[key] === val) return; - if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - if (O === global) { - O[key] = val; - } else if (!safe) { - delete O[key]; - hide(O, key, val); - } else if (O[key]) { - O[key] = val; - } else { - hide(O, key, val); - } -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, TO_STRING, function toString() { - return typeof this == 'function' && this[SRC] || $toString.call(this); -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-proto.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_set-proto.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var check = function (O, proto) { - anObject(O); - if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); -}; -module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line - function (test, buggy, set) { - try { - set = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js")(Function.call, __webpack_require__(/*! ./_object-gopd */ "./node_modules/core-js/modules/_object-gopd.js").f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch (e) { buggy = true; } - return function setPrototypeOf(O, proto) { - check(O, proto); - if (buggy) O.__proto__ = proto; - else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-species.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_set-species.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('species'); - -module.exports = function (KEY) { - var C = global[KEY]; - if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { - configurable: true, - get: function () { return this; } - }); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-to-string-tag.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_set-to-string-tag.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var def = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('toStringTag'); - -module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_shared-key.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_shared-key.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('keys'); -var uid = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js"); -module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_shared.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_shared.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var core = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js"); -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || (global[SHARED] = {}); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: core.version, - mode: __webpack_require__(/*! ./_library */ "./node_modules/core-js/modules/_library.js") ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-absolute-index.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_to-absolute-index.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/core-js/modules/_to-integer.js"); -var max = Math.max; -var min = Math.min; -module.exports = function (index, length) { - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-integer.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-integer.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-iobject.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-iobject.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var defined = __webpack_require__(/*! ./_defined */ "./node_modules/core-js/modules/_defined.js"); -module.exports = function (it) { - return IObject(defined(it)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-length.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-length.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.15 ToLength -var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/core-js/modules/_to-integer.js"); -var min = Math.min; -module.exports = function (it) { - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.13 ToObject(argument) -var defined = __webpack_require__(/*! ./_defined */ "./node_modules/core-js/modules/_defined.js"); -module.exports = function (it) { - return Object(defined(it)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-primitive.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/modules/_to-primitive.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_uid.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_uid.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var id = 0; -var px = Math.random(); -module.exports = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_validate-collection.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_validate-collection.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -module.exports = function (it, TYPE) { - if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_wks.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_wks.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('wks'); -var uid = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js"); -var Symbol = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").Symbol; -var USE_SYMBOL = typeof Symbol == 'function'; - -var $exports = module.exports = function (name) { - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); -}; - -$exports.store = store; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/core.get-iterator-method.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/core.get-iterator-method.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ./_classof */ "./node_modules/core-js/modules/_classof.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -module.exports = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js").getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.map.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/es6.map.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/core-js/modules/_collection-strong.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var MAP = 'Map'; - -// 23.1 Map Objects -module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(MAP, function (get) { - return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.1.3.6 Map.prototype.get(key) - get: function get(key) { - var entry = strong.getEntry(validate(this, MAP), key); - return entry && entry.v; - }, - // 23.1.3.9 Map.prototype.set(key, value) - set: function set(key, value) { - return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); - } -}, strong, true); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.set.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/es6.set.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/core-js/modules/_collection-strong.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var SET = 'Set'; - -// 23.2 Set Objects -module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(SET, function (get) { - return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.2.3.1 Set.prototype.add(value) - add: function add(value) { - return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); - } -}, strong); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.weak-map.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/es6.weak-map.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var each = __webpack_require__(/*! ./_array-methods */ "./node_modules/core-js/modules/_array-methods.js")(0); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var meta = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js"); -var assign = __webpack_require__(/*! ./_object-assign */ "./node_modules/core-js/modules/_object-assign.js"); -var weak = __webpack_require__(/*! ./_collection-weak */ "./node_modules/core-js/modules/_collection-weak.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var NATIVE_WEAK_MAP = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; -var WEAK_MAP = 'WeakMap'; -var getWeak = meta.getWeak; -var isExtensible = Object.isExtensible; -var uncaughtFrozenStore = weak.ufstore; -var InternalMap; - -var wrapper = function (get) { - return function WeakMap() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; -}; - -var methods = { - // 23.3.3.3 WeakMap.prototype.get(key) - get: function get(key) { - if (isObject(key)) { - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); - return data ? data[this._i] : undefined; - } - }, - // 23.3.3.5 WeakMap.prototype.set(key, value) - set: function set(key, value) { - return weak.def(validate(this, WEAK_MAP), key, value); - } -}; - -// 23.3 WeakMap Objects -var $WeakMap = module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(WEAK_MAP, wrapper, methods, weak, true, true); - -// IE11 WeakMap frozen keys fix -if (NATIVE_WEAK_MAP && IS_IE11) { - InternalMap = weak.getConstructor(wrapper, WEAK_MAP); - assign(InternalMap.prototype, methods); - meta.NEED = true; - each(['delete', 'has', 'get', 'set'], function (key) { - var proto = $WeakMap.prototype; - var method = proto[key]; - redefine(proto, key, function (a, b) { - // store frozen objects on internal weakmap shim - if (isObject(a) && !isExtensible(a)) { - if (!this._f) this._f = new InternalMap(); - var result = this._f[key](a, b); - return key == 'set' ? this : result; - // store all the rest on native weakmap - } return method.call(this, a, b); - }); - }); -} - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.define-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.define-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toMetaKey = metadata.key; -var ordinaryDefineOwnMetadata = metadata.set; - -metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) { - ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.delete-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.delete-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toMetaKey = metadata.key; -var getOrCreateMetadataMap = metadata.map; -var store = metadata.store; - -metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]); - var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); - if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; - if (metadataMap.size) return true; - var targetMetadata = store.get(target); - targetMetadata['delete'](targetKey); - return !!targetMetadata.size || store['delete'](target); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js": -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var Set = __webpack_require__(/*! ./es6.set */ "./node_modules/core-js/modules/es6.set.js"); -var from = __webpack_require__(/*! ./_array-from-iterable */ "./node_modules/core-js/modules/_array-from-iterable.js"); -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryOwnMetadataKeys = metadata.keys; -var toMetaKey = metadata.key; - -var ordinaryMetadataKeys = function (O, P) { - var oKeys = ordinaryOwnMetadataKeys(O, P); - var parent = getPrototypeOf(O); - if (parent === null) return oKeys; - var pKeys = ordinaryMetadataKeys(parent, P); - return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; -}; - -metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) { - return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-metadata.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-metadata.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryHasOwnMetadata = metadata.has; -var ordinaryGetOwnMetadata = metadata.get; -var toMetaKey = metadata.key; - -var ordinaryGetMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P); - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; -}; - -metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) { - return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js": -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryOwnMetadataKeys = metadata.keys; -var toMetaKey = metadata.key; - -metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) { - return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-own-metadata.js": -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryGetOwnMetadata = metadata.get; -var toMetaKey = metadata.key; - -metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) { - return ordinaryGetOwnMetadata(metadataKey, anObject(target) - , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.has-metadata.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.has-metadata.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryHasOwnMetadata = metadata.has; -var toMetaKey = metadata.key; - -var ordinaryHasMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return true; - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; -}; - -metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) { - return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.has-own-metadata.js": -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.has-own-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryHasOwnMetadata = metadata.has; -var toMetaKey = metadata.key; - -metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) { - return ordinaryHasOwnMetadata(metadataKey, anObject(target) - , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.metadata.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.metadata.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/core-js/modules/_a-function.js"); -var toMetaKey = $metadata.key; -var ordinaryDefineOwnMetadata = $metadata.set; - -$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) { - return function decorator(target, targetKey) { - ordinaryDefineOwnMetadata( - metadataKey, metadataValue, - (targetKey !== undefined ? anObject : aFunction)(target), - toMetaKey(targetKey) - ); - }; -} }); - - -/***/ }), - -/***/ "./node_modules/zone.js/dist/zone.js": -/*!*******************************************!*\ - !*** ./node_modules/zone.js/dist/zone.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/** -* @license -* Copyright Google Inc. All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ -(function (global, factory) { - true ? factory() : - undefined; -}(this, (function () { 'use strict'; - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Zone$1 = (function (global) { - var performance = global['performance']; - function mark(name) { - performance && performance['mark'] && performance['mark'](name); - } - function performanceMeasure(name, label) { - performance && performance['measure'] && performance['measure'](name, label); - } - mark('Zone'); - var checkDuplicate = global[('__zone_symbol__forceDuplicateZoneCheck')] === true; - if (global['Zone']) { - // if global['Zone'] already exists (maybe zone.js was already loaded or - // some other lib also registered a global object named Zone), we may need - // to throw an error, but sometimes user may not want this error. - // For example, - // we have two web pages, page1 includes zone.js, page2 doesn't. - // and the 1st time user load page1 and page2, everything work fine, - // but when user load page2 again, error occurs because global['Zone'] already exists. - // so we add a flag to let user choose whether to throw this error or not. - // By default, if existing Zone is from zone.js, we will not throw the error. - if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') { - throw new Error('Zone already loaded.'); - } - else { - return global['Zone']; - } - } - var Zone = /** @class */ (function () { - function Zone(parent, zoneSpec) { - this._parent = parent; - this._name = zoneSpec ? zoneSpec.name || 'unnamed' : ''; - this._properties = zoneSpec && zoneSpec.properties || {}; - this._zoneDelegate = - new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec); - } - Zone.assertZonePatched = function () { - if (global['Promise'] !== patches['ZoneAwarePromise']) { - throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' + - 'has been overwritten.\n' + - 'Most likely cause is that a Promise polyfill has been loaded ' + - 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' + - 'If you must load one, do so before loading zone.js.)'); - } - }; - Object.defineProperty(Zone, "root", { - get: function () { - var zone = Zone.current; - while (zone.parent) { - zone = zone.parent; - } - return zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone, "current", { - get: function () { - return _currentZoneFrame.zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone, "currentTask", { - get: function () { - return _currentTask; - }, - enumerable: true, - configurable: true - }); - Zone.__load_patch = function (name, fn) { - if (patches.hasOwnProperty(name)) { - if (checkDuplicate) { - throw Error('Already loaded patch: ' + name); - } - } - else if (!global['__Zone_disable_' + name]) { - var perfName = 'Zone:' + name; - mark(perfName); - patches[name] = fn(global, Zone, _api); - performanceMeasure(perfName, perfName); - } - }; - Object.defineProperty(Zone.prototype, "parent", { - get: function () { - return this._parent; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone.prototype, "name", { - get: function () { - return this._name; - }, - enumerable: true, - configurable: true - }); - Zone.prototype.get = function (key) { - var zone = this.getZoneWith(key); - if (zone) - return zone._properties[key]; - }; - Zone.prototype.getZoneWith = function (key) { - var current = this; - while (current) { - if (current._properties.hasOwnProperty(key)) { - return current; - } - current = current._parent; - } - return null; - }; - Zone.prototype.fork = function (zoneSpec) { - if (!zoneSpec) - throw new Error('ZoneSpec required!'); - return this._zoneDelegate.fork(this, zoneSpec); - }; - Zone.prototype.wrap = function (callback, source) { - if (typeof callback !== 'function') { - throw new Error('Expecting function got: ' + callback); - } - var _callback = this._zoneDelegate.intercept(this, callback, source); - var zone = this; - return function () { - return zone.runGuarded(_callback, this, arguments, source); - }; - }; - Zone.prototype.run = function (callback, applyThis, applyArgs, source) { - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - }; - Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) { - if (applyThis === void 0) { applyThis = null; } - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - }; - Zone.prototype.runTask = function (task, applyThis, applyArgs) { - if (task.zone != this) { - throw new Error('A task can only be run in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - } - // https://github.com/angular/zone.js/issues/778, sometimes eventTask - // will run in notScheduled(canceled) state, we should not try to - // run such kind of task but just return - if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) { - return; - } - var reEntryGuard = task.state != running; - reEntryGuard && task._transitionTo(running, scheduled); - task.runCount++; - var previousTask = _currentTask; - _currentTask = task; - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - if (task.type == macroTask && task.data && !task.data.isPeriodic) { - task.cancelFn = undefined; - } - try { - return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - // if the task's state is notScheduled or unknown, then it has already been cancelled - // we should not reset the state to scheduled - if (task.state !== notScheduled && task.state !== unknown) { - if (task.type == eventTask || (task.data && task.data.isPeriodic)) { - reEntryGuard && task._transitionTo(scheduled, running); - } - else { - task.runCount = 0; - this._updateTaskCount(task, -1); - reEntryGuard && - task._transitionTo(notScheduled, running, notScheduled); - } - } - _currentZoneFrame = _currentZoneFrame.parent; - _currentTask = previousTask; - } - }; - Zone.prototype.scheduleTask = function (task) { - if (task.zone && task.zone !== this) { - // check if the task was rescheduled, the newZone - // should not be the children of the original zone - var newZone = this; - while (newZone) { - if (newZone === task.zone) { - throw Error("can not reschedule task to " + this.name + " which is descendants of the original zone " + task.zone.name); - } - newZone = newZone.parent; - } - } - task._transitionTo(scheduling, notScheduled); - var zoneDelegates = []; - task._zoneDelegates = zoneDelegates; - task._zone = this; - try { - task = this._zoneDelegate.scheduleTask(this, task); - } - catch (err) { - // should set task's state to unknown when scheduleTask throw error - // because the err may from reschedule, so the fromState maybe notScheduled - task._transitionTo(unknown, scheduling, notScheduled); - // TODO: @JiaLiPassion, should we check the result from handleError? - this._zoneDelegate.handleError(this, err); - throw err; - } - if (task._zoneDelegates === zoneDelegates) { - // we have to check because internally the delegate can reschedule the task. - this._updateTaskCount(task, 1); - } - if (task.state == scheduling) { - task._transitionTo(scheduled, scheduling); - } - return task; - }; - Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) { - return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined)); - }; - Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel)); - }; - Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel)); - }; - Zone.prototype.cancelTask = function (task) { - if (task.zone != this) - throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - task._transitionTo(canceling, scheduled, running); - try { - this._zoneDelegate.cancelTask(this, task); - } - catch (err) { - // if error occurs when cancelTask, transit the state to unknown - task._transitionTo(unknown, canceling); - this._zoneDelegate.handleError(this, err); - throw err; - } - this._updateTaskCount(task, -1); - task._transitionTo(notScheduled, canceling); - task.runCount = 0; - return task; - }; - Zone.prototype._updateTaskCount = function (task, count) { - var zoneDelegates = task._zoneDelegates; - if (count == -1) { - task._zoneDelegates = null; - } - for (var i = 0; i < zoneDelegates.length; i++) { - zoneDelegates[i]._updateTaskCount(task.type, count); - } - }; - Zone.__symbol__ = __symbol__; - return Zone; - }()); - var DELEGATE_ZS = { - name: '', - onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); }, - onScheduleTask: function (delegate, _, target, task) { - return delegate.scheduleTask(target, task); - }, - onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) { - return delegate.invokeTask(target, task, applyThis, applyArgs); - }, - onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); } - }; - var ZoneDelegate = /** @class */ (function () { - function ZoneDelegate(zone, parentDelegate, zoneSpec) { - this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 }; - this.zone = zone; - this._parentDelegate = parentDelegate; - this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS); - this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt); - this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate.zone); - this._interceptZS = - zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS); - this._interceptDlgt = - zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt); - this._interceptCurrZone = - zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate.zone); - this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS); - this._invokeDlgt = - zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt); - this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate.zone); - this._handleErrorZS = - zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS); - this._handleErrorDlgt = - zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt); - this._handleErrorCurrZone = - zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate.zone); - this._scheduleTaskZS = - zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS); - this._scheduleTaskDlgt = zoneSpec && - (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt); - this._scheduleTaskCurrZone = - zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate.zone); - this._invokeTaskZS = - zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS); - this._invokeTaskDlgt = - zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt); - this._invokeTaskCurrZone = - zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate.zone); - this._cancelTaskZS = - zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS); - this._cancelTaskDlgt = - zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt); - this._cancelTaskCurrZone = - zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate.zone); - this._hasTaskZS = null; - this._hasTaskDlgt = null; - this._hasTaskDlgtOwner = null; - this._hasTaskCurrZone = null; - var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask; - var parentHasTask = parentDelegate && parentDelegate._hasTaskZS; - if (zoneSpecHasTask || parentHasTask) { - // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such - // a case all task related interceptors must go through this ZD. We can't short circuit it. - this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS; - this._hasTaskDlgt = parentDelegate; - this._hasTaskDlgtOwner = this; - this._hasTaskCurrZone = zone; - if (!zoneSpec.onScheduleTask) { - this._scheduleTaskZS = DELEGATE_ZS; - this._scheduleTaskDlgt = parentDelegate; - this._scheduleTaskCurrZone = this.zone; - } - if (!zoneSpec.onInvokeTask) { - this._invokeTaskZS = DELEGATE_ZS; - this._invokeTaskDlgt = parentDelegate; - this._invokeTaskCurrZone = this.zone; - } - if (!zoneSpec.onCancelTask) { - this._cancelTaskZS = DELEGATE_ZS; - this._cancelTaskDlgt = parentDelegate; - this._cancelTaskCurrZone = this.zone; - } - } - } - ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) { - return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) : - new Zone(targetZone, zoneSpec); - }; - ZoneDelegate.prototype.intercept = function (targetZone, callback, source) { - return this._interceptZS ? - this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) : - callback; - }; - ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) { - return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) : - callback.apply(applyThis, applyArgs); - }; - ZoneDelegate.prototype.handleError = function (targetZone, error) { - return this._handleErrorZS ? - this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) : - true; - }; - ZoneDelegate.prototype.scheduleTask = function (targetZone, task) { - var returnTask = task; - if (this._scheduleTaskZS) { - if (this._hasTaskZS) { - returnTask._zoneDelegates.push(this._hasTaskDlgtOwner); - } - returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task); - if (!returnTask) - returnTask = task; - } - else { - if (task.scheduleFn) { - task.scheduleFn(task); - } - else if (task.type == microTask) { - scheduleMicroTask(task); - } - else { - throw new Error('Task is missing scheduleFn.'); - } - } - return returnTask; - }; - ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) { - return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) : - task.callback.apply(applyThis, applyArgs); - }; - ZoneDelegate.prototype.cancelTask = function (targetZone, task) { - var value; - if (this._cancelTaskZS) { - value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task); - } - else { - if (!task.cancelFn) { - throw Error('Task is not cancelable'); - } - value = task.cancelFn(task); - } - return value; - }; - ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) { - // hasTask should not throw error so other ZoneDelegate - // can still trigger hasTask callback - try { - this._hasTaskZS && - this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty); - } - catch (err) { - this.handleError(targetZone, err); - } - }; - ZoneDelegate.prototype._updateTaskCount = function (type, count) { - var counts = this._taskCounts; - var prev = counts[type]; - var next = counts[type] = prev + count; - if (next < 0) { - throw new Error('More tasks executed then were scheduled.'); - } - if (prev == 0 || next == 0) { - var isEmpty = { - microTask: counts['microTask'] > 0, - macroTask: counts['macroTask'] > 0, - eventTask: counts['eventTask'] > 0, - change: type - }; - this.hasTask(this.zone, isEmpty); - } - }; - return ZoneDelegate; - }()); - var ZoneTask = /** @class */ (function () { - function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) { - this._zone = null; - this.runCount = 0; - this._zoneDelegates = null; - this._state = 'notScheduled'; - this.type = type; - this.source = source; - this.data = options; - this.scheduleFn = scheduleFn; - this.cancelFn = cancelFn; - this.callback = callback; - var self = this; - // TODO: @JiaLiPassion options should have interface - if (type === eventTask && options && options.useG) { - this.invoke = ZoneTask.invokeTask; - } - else { - this.invoke = function () { - return ZoneTask.invokeTask.call(global, self, this, arguments); - }; - } - } - ZoneTask.invokeTask = function (task, target, args) { - if (!task) { - task = this; - } - _numberOfNestedTaskFrames++; - try { - task.runCount++; - return task.zone.runTask(task, target, args); - } - finally { - if (_numberOfNestedTaskFrames == 1) { - drainMicroTaskQueue(); - } - _numberOfNestedTaskFrames--; - } - }; - Object.defineProperty(ZoneTask.prototype, "zone", { - get: function () { - return this._zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ZoneTask.prototype, "state", { - get: function () { - return this._state; - }, - enumerable: true, - configurable: true - }); - ZoneTask.prototype.cancelScheduleRequest = function () { - this._transitionTo(notScheduled, scheduling); - }; - ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) { - if (this._state === fromState1 || this._state === fromState2) { - this._state = toState; - if (toState == notScheduled) { - this._zoneDelegates = null; - } - } - else { - throw new Error(this.type + " '" + this.source + "': can not transition to '" + toState + "', expecting state '" + fromState1 + "'" + (fromState2 ? ' or \'' + fromState2 + '\'' : '') + ", was '" + this._state + "'."); - } - }; - ZoneTask.prototype.toString = function () { - if (this.data && typeof this.data.handleId !== 'undefined') { - return this.data.handleId.toString(); - } - else { - return Object.prototype.toString.call(this); - } - }; - // add toJSON method to prevent cyclic error when - // call JSON.stringify(zoneTask) - ZoneTask.prototype.toJSON = function () { - return { - type: this.type, - state: this.state, - source: this.source, - zone: this.zone.name, - runCount: this.runCount - }; - }; - return ZoneTask; - }()); - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// MICROTASK QUEUE - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - var symbolSetTimeout = __symbol__('setTimeout'); - var symbolPromise = __symbol__('Promise'); - var symbolThen = __symbol__('then'); - var _microTaskQueue = []; - var _isDrainingMicrotaskQueue = false; - var nativeMicroTaskQueuePromise; - function scheduleMicroTask(task) { - // if we are not running in any task, and there has not been anything scheduled - // we must bootstrap the initial task creation by manually scheduling the drain - if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) { - // We are not running in Task, so we need to kickstart the microtask queue. - if (!nativeMicroTaskQueuePromise) { - if (global[symbolPromise]) { - nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0); - } - } - if (nativeMicroTaskQueuePromise) { - var nativeThen = nativeMicroTaskQueuePromise[symbolThen]; - if (!nativeThen) { - // native Promise is not patchable, we need to use `then` directly - // issue 1078 - nativeThen = nativeMicroTaskQueuePromise['then']; - } - nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue); - } - else { - global[symbolSetTimeout](drainMicroTaskQueue, 0); - } - } - task && _microTaskQueue.push(task); - } - function drainMicroTaskQueue() { - if (!_isDrainingMicrotaskQueue) { - _isDrainingMicrotaskQueue = true; - while (_microTaskQueue.length) { - var queue = _microTaskQueue; - _microTaskQueue = []; - for (var i = 0; i < queue.length; i++) { - var task = queue[i]; - try { - task.zone.runTask(task, null, null); - } - catch (error) { - _api.onUnhandledError(error); - } - } - } - _api.microtaskDrainDone(); - _isDrainingMicrotaskQueue = false; - } - } - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// BOOTSTRAP - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - var NO_ZONE = { name: 'NO ZONE' }; - var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown'; - var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask'; - var patches = {}; - var _api = { - symbol: __symbol__, - currentZoneFrame: function () { return _currentZoneFrame; }, - onUnhandledError: noop, - microtaskDrainDone: noop, - scheduleMicroTask: scheduleMicroTask, - showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; }, - patchEventTarget: function () { return []; }, - patchOnProperties: noop, - patchMethod: function () { return noop; }, - bindArguments: function () { return []; }, - patchThen: function () { return noop; }, - setNativePromise: function (NativePromise) { - // sometimes NativePromise.resolve static function - // is not ready yet, (such as core-js/es6.promise) - // so we need to check here. - if (NativePromise && typeof NativePromise.resolve === 'function') { - nativeMicroTaskQueuePromise = NativePromise.resolve(0); - } - }, - }; - var _currentZoneFrame = { parent: null, zone: new Zone(null, null) }; - var _currentTask = null; - var _numberOfNestedTaskFrames = 0; - function noop() { } - function __symbol__(name) { - return '__zone_symbol__' + name; - } - performanceMeasure('Zone', 'Zone'); - return global['Zone'] = Zone; -})(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global); - -var __values = (undefined && undefined.__values) || function (o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; -}; -Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) { - var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var ObjectDefineProperty = Object.defineProperty; - function readableObjectToString(obj) { - if (obj && obj.toString === Object.prototype.toString) { - var className = obj.constructor && obj.constructor.name; - return (className ? className : '') + ': ' + JSON.stringify(obj); - } - return obj ? obj.toString() : Object.prototype.toString.call(obj); - } - var __symbol__ = api.symbol; - var _uncaughtPromiseErrors = []; - var symbolPromise = __symbol__('Promise'); - var symbolThen = __symbol__('then'); - var creationTrace = '__creationTrace__'; - api.onUnhandledError = function (e) { - if (api.showUncaughtError()) { - var rejection = e && e.rejection; - if (rejection) { - console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined); - } - else { - console.error(e); - } - } - }; - api.microtaskDrainDone = function () { - while (_uncaughtPromiseErrors.length) { - var _loop_1 = function () { - var uncaughtPromiseError = _uncaughtPromiseErrors.shift(); - try { - uncaughtPromiseError.zone.runGuarded(function () { - throw uncaughtPromiseError; - }); - } - catch (error) { - handleUnhandledRejection(error); - } - }; - while (_uncaughtPromiseErrors.length) { - _loop_1(); - } - } - }; - var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler'); - function handleUnhandledRejection(e) { - api.onUnhandledError(e); - try { - var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL]; - if (handler && typeof handler === 'function') { - handler.call(this, e); - } - } - catch (err) { - } - } - function isThenable(value) { - return value && value.then; - } - function forwardResolution(value) { - return value; - } - function forwardRejection(rejection) { - return ZoneAwarePromise.reject(rejection); - } - var symbolState = __symbol__('state'); - var symbolValue = __symbol__('value'); - var symbolFinally = __symbol__('finally'); - var symbolParentPromiseValue = __symbol__('parentPromiseValue'); - var symbolParentPromiseState = __symbol__('parentPromiseState'); - var source = 'Promise.then'; - var UNRESOLVED = null; - var RESOLVED = true; - var REJECTED = false; - var REJECTED_NO_CATCH = 0; - function makeResolver(promise, state) { - return function (v) { - try { - resolvePromise(promise, state, v); - } - catch (err) { - resolvePromise(promise, false, err); - } - // Do not return value or you will break the Promise spec. - }; - } - var once = function () { - var wasCalled = false; - return function wrapper(wrappedFunction) { - return function () { - if (wasCalled) { - return; - } - wasCalled = true; - wrappedFunction.apply(null, arguments); - }; - }; - }; - var TYPE_ERROR = 'Promise resolved with itself'; - var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace'); - // Promise Resolution - function resolvePromise(promise, state, value) { - var onceWrapper = once(); - if (promise === value) { - throw new TypeError(TYPE_ERROR); - } - if (promise[symbolState] === UNRESOLVED) { - // should only get value.then once based on promise spec. - var then = null; - try { - if (typeof value === 'object' || typeof value === 'function') { - then = value && value.then; - } - } - catch (err) { - onceWrapper(function () { - resolvePromise(promise, false, err); - })(); - return promise; - } - // if (value instanceof ZoneAwarePromise) { - if (state !== REJECTED && value instanceof ZoneAwarePromise && - value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) && - value[symbolState] !== UNRESOLVED) { - clearRejectedNoCatch(value); - resolvePromise(promise, value[symbolState], value[symbolValue]); - } - else if (state !== REJECTED && typeof then === 'function') { - try { - then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))); - } - catch (err) { - onceWrapper(function () { - resolvePromise(promise, false, err); - })(); - } - } - else { - promise[symbolState] = state; - var queue = promise[symbolValue]; - promise[symbolValue] = value; - if (promise[symbolFinally] === symbolFinally) { - // the promise is generated by Promise.prototype.finally - if (state === RESOLVED) { - // the state is resolved, should ignore the value - // and use parent promise value - promise[symbolState] = promise[symbolParentPromiseState]; - promise[symbolValue] = promise[symbolParentPromiseValue]; - } - } - // record task information in value when error occurs, so we can - // do some additional work such as render longStackTrace - if (state === REJECTED && value instanceof Error) { - // check if longStackTraceZone is here - var trace = Zone.currentTask && Zone.currentTask.data && - Zone.currentTask.data[creationTrace]; - if (trace) { - // only keep the long stack trace into error when in longStackTraceZone - ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace }); - } - } - for (var i = 0; i < queue.length;) { - scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]); - } - if (queue.length == 0 && state == REJECTED) { - promise[symbolState] = REJECTED_NO_CATCH; - try { - // try to print more readable error log - throw new Error('Uncaught (in promise): ' + readableObjectToString(value) + - (value && value.stack ? '\n' + value.stack : '')); - } - catch (err) { - var error_1 = err; - error_1.rejection = value; - error_1.promise = promise; - error_1.zone = Zone.current; - error_1.task = Zone.currentTask; - _uncaughtPromiseErrors.push(error_1); - api.scheduleMicroTask(); // to make sure that it is running - } - } - } - } - // Resolving an already resolved promise is a noop. - return promise; - } - var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler'); - function clearRejectedNoCatch(promise) { - if (promise[symbolState] === REJECTED_NO_CATCH) { - // if the promise is rejected no catch status - // and queue.length > 0, means there is a error handler - // here to handle the rejected promise, we should trigger - // windows.rejectionhandled eventHandler or nodejs rejectionHandled - // eventHandler - try { - var handler = Zone[REJECTION_HANDLED_HANDLER]; - if (handler && typeof handler === 'function') { - handler.call(this, { rejection: promise[symbolValue], promise: promise }); - } - } - catch (err) { - } - promise[symbolState] = REJECTED; - for (var i = 0; i < _uncaughtPromiseErrors.length; i++) { - if (promise === _uncaughtPromiseErrors[i].promise) { - _uncaughtPromiseErrors.splice(i, 1); - } - } - } - } - function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) { - clearRejectedNoCatch(promise); - var promiseState = promise[symbolState]; - var delegate = promiseState ? - (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution : - (typeof onRejected === 'function') ? onRejected : forwardRejection; - zone.scheduleMicroTask(source, function () { - try { - var parentPromiseValue = promise[symbolValue]; - var isFinallyPromise = chainPromise && symbolFinally === chainPromise[symbolFinally]; - if (isFinallyPromise) { - // if the promise is generated from finally call, keep parent promise's state and value - chainPromise[symbolParentPromiseValue] = parentPromiseValue; - chainPromise[symbolParentPromiseState] = promiseState; - } - // should not pass value to finally callback - var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ? - [] : - [parentPromiseValue]); - resolvePromise(chainPromise, true, value); - } - catch (error) { - // if error occurs, should always return this error - resolvePromise(chainPromise, false, error); - } - }, chainPromise); - } - var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }'; - var ZoneAwarePromise = /** @class */ (function () { - function ZoneAwarePromise(executor) { - var promise = this; - if (!(promise instanceof ZoneAwarePromise)) { - throw new Error('Must be an instanceof Promise.'); - } - promise[symbolState] = UNRESOLVED; - promise[symbolValue] = []; // queue; - try { - executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED)); - } - catch (error) { - resolvePromise(promise, false, error); - } - } - ZoneAwarePromise.toString = function () { - return ZONE_AWARE_PROMISE_TO_STRING; - }; - ZoneAwarePromise.resolve = function (value) { - return resolvePromise(new this(null), RESOLVED, value); - }; - ZoneAwarePromise.reject = function (error) { - return resolvePromise(new this(null), REJECTED, error); - }; - ZoneAwarePromise.race = function (values) { - var e_1, _a; - var resolve; - var reject; - var promise = new this(function (res, rej) { - resolve = res; - reject = rej; - }); - function onResolve(value) { - promise && (promise = null || resolve(value)); - } - function onReject(error) { - promise && (promise = null || reject(error)); - } - try { - for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) { - var value = values_1_1.value; - if (!isThenable(value)) { - value = this.resolve(value); - } - value.then(onResolve, onReject); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1); - } - finally { if (e_1) throw e_1.error; } - } - return promise; - }; - ZoneAwarePromise.all = function (values) { - var e_2, _a; - var resolve; - var reject; - var promise = new this(function (res, rej) { - resolve = res; - reject = rej; - }); - // Start at 2 to prevent prematurely resolving if .then is called immediately. - var unresolvedCount = 2; - var valueIndex = 0; - var resolvedValues = []; - var _loop_2 = function (value) { - if (!isThenable(value)) { - value = this_1.resolve(value); - } - var curValueIndex = valueIndex; - value.then(function (value) { - resolvedValues[curValueIndex] = value; - unresolvedCount--; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - }, reject); - unresolvedCount++; - valueIndex++; - }; - var this_1 = this; - try { - for (var values_2 = __values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) { - var value = values_2_1.value; - _loop_2(value); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2); - } - finally { if (e_2) throw e_2.error; } - } - // Make the unresolvedCount zero-based again. - unresolvedCount -= 2; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - return promise; - }; - ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) { - var chainPromise = new this.constructor(null); - var zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected); - } - return chainPromise; - }; - ZoneAwarePromise.prototype.catch = function (onRejected) { - return this.then(null, onRejected); - }; - ZoneAwarePromise.prototype.finally = function (onFinally) { - var chainPromise = new this.constructor(null); - chainPromise[symbolFinally] = symbolFinally; - var zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFinally, onFinally); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally); - } - return chainPromise; - }; - return ZoneAwarePromise; - }()); - // Protect against aggressive optimizers dropping seemingly unused properties. - // E.g. Closure Compiler in advanced mode. - ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve; - ZoneAwarePromise['reject'] = ZoneAwarePromise.reject; - ZoneAwarePromise['race'] = ZoneAwarePromise.race; - ZoneAwarePromise['all'] = ZoneAwarePromise.all; - var NativePromise = global[symbolPromise] = global['Promise']; - var ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise'); - var desc = ObjectGetOwnPropertyDescriptor(global, 'Promise'); - if (!desc || desc.configurable) { - desc && delete desc.writable; - desc && delete desc.value; - if (!desc) { - desc = { configurable: true, enumerable: true }; - } - desc.get = function () { - // if we already set ZoneAwarePromise, use patched one - // otherwise return native one. - return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise]; - }; - desc.set = function (NewNativePromise) { - if (NewNativePromise === ZoneAwarePromise) { - // if the NewNativePromise is ZoneAwarePromise - // save to global - global[ZONE_AWARE_PROMISE] = NewNativePromise; - } - else { - // if the NewNativePromise is not ZoneAwarePromise - // for example: after load zone.js, some library just - // set es6-promise to global, if we set it to global - // directly, assertZonePatched will fail and angular - // will not loaded, so we just set the NewNativePromise - // to global[symbolPromise], so the result is just like - // we load ES6 Promise before zone.js - global[symbolPromise] = NewNativePromise; - if (!NewNativePromise.prototype[symbolThen]) { - patchThen(NewNativePromise); - } - api.setNativePromise(NewNativePromise); - } - }; - ObjectDefineProperty(global, 'Promise', desc); - } - global['Promise'] = ZoneAwarePromise; - var symbolThenPatched = __symbol__('thenPatched'); - function patchThen(Ctor) { - var proto = Ctor.prototype; - var prop = ObjectGetOwnPropertyDescriptor(proto, 'then'); - if (prop && (prop.writable === false || !prop.configurable)) { - // check Ctor.prototype.then propertyDescriptor is writable or not - // in meteor env, writable is false, we should ignore such case - return; - } - var originalThen = proto.then; - // Keep a reference to the original method. - proto[symbolThen] = originalThen; - Ctor.prototype.then = function (onResolve, onReject) { - var _this = this; - var wrapped = new ZoneAwarePromise(function (resolve, reject) { - originalThen.call(_this, resolve, reject); - }); - return wrapped.then(onResolve, onReject); - }; - Ctor[symbolThenPatched] = true; - } - api.patchThen = patchThen; - if (NativePromise) { - patchThen(NativePromise); - } - // This is not part of public API, but it is useful for tests, so we expose it. - Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors; - return ZoneAwarePromise; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -Zone.__load_patch('fetch', function (global, Zone, api) { - var fetch = global['fetch']; - var ZoneAwarePromise = global.Promise; - var symbolThenPatched = api.symbol('thenPatched'); - var fetchTaskScheduling = api.symbol('fetchTaskScheduling'); - var fetchTaskAborting = api.symbol('fetchTaskAborting'); - if (typeof fetch !== 'function') { - return; - } - var OriginalAbortController = global['AbortController']; - var supportAbort = typeof OriginalAbortController === 'function'; - var abortNative = null; - if (supportAbort) { - global['AbortController'] = function () { - var abortController = new OriginalAbortController(); - var signal = abortController.signal; - signal.abortController = abortController; - return abortController; - }; - abortNative = api.patchMethod(OriginalAbortController.prototype, 'abort', function (delegate) { return function (self, args) { - if (self.task) { - return self.task.zone.cancelTask(self.task); - } - return delegate.apply(self, args); - }; }); - } - var placeholder = function () { }; - global['fetch'] = function () { - var _this = this; - var args = Array.prototype.slice.call(arguments); - var options = args.length > 1 ? args[1] : null; - var signal = options && options.signal; - return new Promise(function (res, rej) { - var task = Zone.current.scheduleMacroTask('fetch', placeholder, args, function () { - var fetchPromise; - var zone = Zone.current; - try { - zone[fetchTaskScheduling] = true; - fetchPromise = fetch.apply(_this, args); - } - catch (error) { - rej(error); - return; - } - finally { - zone[fetchTaskScheduling] = false; - } - if (!(fetchPromise instanceof ZoneAwarePromise)) { - var ctor = fetchPromise.constructor; - if (!ctor[symbolThenPatched]) { - api.patchThen(ctor); - } - } - fetchPromise.then(function (resource) { - if (task.state !== 'notScheduled') { - task.invoke(); - } - res(resource); - }, function (error) { - if (task.state !== 'notScheduled') { - task.invoke(); - } - rej(error); - }); - }, function () { - if (!supportAbort) { - rej('No AbortController supported, can not cancel fetch'); - return; - } - if (signal && signal.abortController && !signal.aborted && - typeof signal.abortController.abort === 'function' && abortNative) { - try { - Zone.current[fetchTaskAborting] = true; - abortNative.call(signal.abortController); - } - finally { - Zone.current[fetchTaskAborting] = false; - } - } - else { - rej('cancel fetch need a AbortController.signal'); - } - }); - if (signal && signal.abortController) { - signal.abortController.task = task; - } - }); - }; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * Suppress closure compiler errors about unknown 'Zone' variable - * @fileoverview - * @suppress {undefinedVars,globalThis,missingRequire} - */ -// issue #989, to reduce bundle size, use short name -/** Object.getOwnPropertyDescriptor */ -var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -/** Object.defineProperty */ -var ObjectDefineProperty = Object.defineProperty; -/** Object.getPrototypeOf */ -var ObjectGetPrototypeOf = Object.getPrototypeOf; -/** Object.create */ -var ObjectCreate = Object.create; -/** Array.prototype.slice */ -var ArraySlice = Array.prototype.slice; -/** addEventListener string const */ -var ADD_EVENT_LISTENER_STR = 'addEventListener'; -/** removeEventListener string const */ -var REMOVE_EVENT_LISTENER_STR = 'removeEventListener'; -/** zoneSymbol addEventListener */ -var ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR); -/** zoneSymbol removeEventListener */ -var ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR); -/** true string const */ -var TRUE_STR = 'true'; -/** false string const */ -var FALSE_STR = 'false'; -/** __zone_symbol__ string const */ -var ZONE_SYMBOL_PREFIX = '__zone_symbol__'; -function wrapWithCurrentZone(callback, source) { - return Zone.current.wrap(callback, source); -} -function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) { - return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel); -} -var zoneSymbol = Zone.__symbol__; -var isWindowExists = typeof window !== 'undefined'; -var internalWindow = isWindowExists ? window : undefined; -var _global = isWindowExists && internalWindow || typeof self === 'object' && self || global; -var REMOVE_ATTRIBUTE = 'removeAttribute'; -var NULL_ON_PROP_VALUE = [null]; -function bindArguments(args, source) { - for (var i = args.length - 1; i >= 0; i--) { - if (typeof args[i] === 'function') { - args[i] = wrapWithCurrentZone(args[i], source + '_' + i); - } - } - return args; -} -function patchPrototype(prototype, fnNames) { - var source = prototype.constructor['name']; - var _loop_1 = function (i) { - var name_1 = fnNames[i]; - var delegate = prototype[name_1]; - if (delegate) { - var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1); - if (!isPropertyWritable(prototypeDesc)) { - return "continue"; - } - prototype[name_1] = (function (delegate) { - var patched = function () { - return delegate.apply(this, bindArguments(arguments, source + '.' + name_1)); - }; - attachOriginToPatched(patched, delegate); - return patched; - })(delegate); - } - }; - for (var i = 0; i < fnNames.length; i++) { - _loop_1(i); - } -} -function isPropertyWritable(propertyDesc) { - if (!propertyDesc) { - return true; - } - if (propertyDesc.writable === false) { - return false; - } - return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined'); -} -var isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope); -// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify -// this code. -var isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]'); -var isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); -// we are in electron of nw, so we are both browser and nodejs -// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify -// this code. -var isMix = typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]' && !isWebWorker && - !!(isWindowExists && internalWindow['HTMLElement']); -var zoneSymbolEventNames = {}; -var wrapFn = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - var eventNameSymbol = zoneSymbolEventNames[event.type]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type); - } - var target = this || event.target || _global; - var listener = target[eventNameSymbol]; - var result; - if (isBrowser && target === internalWindow && event.type === 'error') { - // window.onerror have different signiture - // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror - // and onerror callback will prevent default when callback return true - var errorEvent = event; - result = listener && - listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error); - if (result === true) { - event.preventDefault(); - } - } - else { - result = listener && listener.apply(this, arguments); - if (result != undefined && !result) { - event.preventDefault(); - } - } - return result; -}; -function patchProperty(obj, prop, prototype) { - var desc = ObjectGetOwnPropertyDescriptor(obj, prop); - if (!desc && prototype) { - // when patch window object, use prototype to check prop exist or not - var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop); - if (prototypeDesc) { - desc = { enumerable: true, configurable: true }; - } - } - // if the descriptor not exists or is not configurable - // just return - if (!desc || !desc.configurable) { - return; - } - var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched'); - if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) { - return; - } - // A property descriptor cannot have getter/setter and be writable - // deleting the writable and value properties avoids this error: - // - // TypeError: property descriptors must not specify a value or be writable when a - // getter or setter has been specified - delete desc.writable; - delete desc.value; - var originalDescGet = desc.get; - var originalDescSet = desc.set; - // substr(2) cuz 'onclick' -> 'click', etc - var eventName = prop.substr(2); - var eventNameSymbol = zoneSymbolEventNames[eventName]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName); - } - desc.set = function (newValue) { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - var target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return; - } - var previousValue = target[eventNameSymbol]; - if (previousValue) { - target.removeEventListener(eventName, wrapFn); - } - // issue #978, when onload handler was added before loading zone.js - // we should remove it with originalDescSet - if (originalDescSet) { - originalDescSet.apply(target, NULL_ON_PROP_VALUE); - } - if (typeof newValue === 'function') { - target[eventNameSymbol] = newValue; - target.addEventListener(eventName, wrapFn, false); - } - else { - target[eventNameSymbol] = null; - } - }; - // The getter would return undefined for unassigned properties but the default value of an - // unassigned property is null - desc.get = function () { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - var target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return null; - } - var listener = target[eventNameSymbol]; - if (listener) { - return listener; - } - else if (originalDescGet) { - // result will be null when use inline event attribute, - // such as - // because the onclick function is internal raw uncompiled handler - // the onclick will be evaluated when first time event was triggered or - // the property is accessed, https://github.com/angular/zone.js/issues/525 - // so we should use original native get to retrieve the handler - var value = originalDescGet && originalDescGet.call(this); - if (value) { - desc.set.call(this, value); - if (typeof target[REMOVE_ATTRIBUTE] === 'function') { - target.removeAttribute(prop); - } - return value; - } - } - return null; - }; - ObjectDefineProperty(obj, prop, desc); - obj[onPropPatchedSymbol] = true; -} -function patchOnProperties(obj, properties, prototype) { - if (properties) { - for (var i = 0; i < properties.length; i++) { - patchProperty(obj, 'on' + properties[i], prototype); - } - } - else { - var onProperties = []; - for (var prop in obj) { - if (prop.substr(0, 2) == 'on') { - onProperties.push(prop); - } - } - for (var j = 0; j < onProperties.length; j++) { - patchProperty(obj, onProperties[j], prototype); - } - } -} -var originalInstanceKey = zoneSymbol('originalInstance'); -// wrap some native API on `window` -function patchClass(className) { - var OriginalClass = _global[className]; - if (!OriginalClass) - return; - // keep original class in global - _global[zoneSymbol(className)] = OriginalClass; - _global[className] = function () { - var a = bindArguments(arguments, className); - switch (a.length) { - case 0: - this[originalInstanceKey] = new OriginalClass(); - break; - case 1: - this[originalInstanceKey] = new OriginalClass(a[0]); - break; - case 2: - this[originalInstanceKey] = new OriginalClass(a[0], a[1]); - break; - case 3: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); - break; - case 4: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); - break; - default: - throw new Error('Arg list too long.'); - } - }; - // attach original delegate to patched function - attachOriginToPatched(_global[className], OriginalClass); - var instance = new OriginalClass(function () { }); - var prop; - for (prop in instance) { - // https://bugs.webkit.org/show_bug.cgi?id=44721 - if (className === 'XMLHttpRequest' && prop === 'responseBlob') - continue; - (function (prop) { - if (typeof instance[prop] === 'function') { - _global[className].prototype[prop] = function () { - return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments); - }; - } - else { - ObjectDefineProperty(_global[className].prototype, prop, { - set: function (fn) { - if (typeof fn === 'function') { - this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop); - // keep callback in wrapped function so we can - // use it in Function.prototype.toString to return - // the native one. - attachOriginToPatched(this[originalInstanceKey][prop], fn); - } - else { - this[originalInstanceKey][prop] = fn; - } - }, - get: function () { - return this[originalInstanceKey][prop]; - } - }); - } - }(prop)); - } - for (prop in OriginalClass) { - if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { - _global[className][prop] = OriginalClass[prop]; - } - } -} -function copySymbolProperties(src, dest) { - if (typeof Object.getOwnPropertySymbols !== 'function') { - return; - } - var symbols = Object.getOwnPropertySymbols(src); - symbols.forEach(function (symbol) { - var desc = Object.getOwnPropertyDescriptor(src, symbol); - Object.defineProperty(dest, symbol, { - get: function () { - return src[symbol]; - }, - set: function (value) { - if (desc && (!desc.writable || typeof desc.set !== 'function')) { - // if src[symbol] is not writable or not have a setter, just return - return; - } - src[symbol] = value; - }, - enumerable: desc ? desc.enumerable : true, - configurable: desc ? desc.configurable : true - }); - }); -} -var shouldCopySymbolProperties = false; - -function patchMethod(target, name, patchFn) { - var proto = target; - while (proto && !proto.hasOwnProperty(name)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && target[name]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = target; - } - var delegateName = zoneSymbol(name); - var delegate = null; - if (proto && !(delegate = proto[delegateName])) { - delegate = proto[delegateName] = proto[name]; - // check whether proto[name] is writable - // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob - var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name); - if (isPropertyWritable(desc)) { - var patchDelegate_1 = patchFn(delegate, delegateName, name); - proto[name] = function () { - return patchDelegate_1(this, arguments); - }; - attachOriginToPatched(proto[name], delegate); - if (shouldCopySymbolProperties) { - copySymbolProperties(delegate, proto[name]); - } - } - } - return delegate; -} -// TODO: @JiaLiPassion, support cancel task later if necessary -function patchMacroTask(obj, funcName, metaCreator) { - var setNative = null; - function scheduleTask(task) { - var data = task.data; - data.args[data.cbIdx] = function () { - task.invoke.apply(this, arguments); - }; - setNative.apply(data.target, data.args); - return task; - } - setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) { - var meta = metaCreator(self, args); - if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { - return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask); - } - else { - // cause an error by calling it directly. - return delegate.apply(self, args); - } - }; }); -} - -function attachOriginToPatched(patched, original) { - patched[zoneSymbol('OriginalDelegate')] = original; -} -var isDetectedIEOrEdge = false; -var ieOrEdge = false; -function isIE() { - try { - var ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) { - return true; - } - } - catch (error) { - } - return false; -} -function isIEOrEdge() { - if (isDetectedIEOrEdge) { - return ieOrEdge; - } - isDetectedIEOrEdge = true; - try { - var ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) { - ieOrEdge = true; - } - return ieOrEdge; - } - catch (error) { - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// override Function.prototype.toString to make zone.js patched function -// look like native function -Zone.__load_patch('toString', function (global) { - // patch Func.prototype.toString to let them look like native - var originalFunctionToString = Function.prototype.toString; - var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate'); - var PROMISE_SYMBOL = zoneSymbol('Promise'); - var ERROR_SYMBOL = zoneSymbol('Error'); - var newFunctionToString = function toString() { - if (typeof this === 'function') { - var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL]; - if (originalDelegate) { - if (typeof originalDelegate === 'function') { - return originalFunctionToString.apply(this[ORIGINAL_DELEGATE_SYMBOL], arguments); - } - else { - return Object.prototype.toString.call(originalDelegate); - } - } - if (this === Promise) { - var nativePromise = global[PROMISE_SYMBOL]; - if (nativePromise) { - return originalFunctionToString.apply(nativePromise, arguments); - } - } - if (this === Error) { - var nativeError = global[ERROR_SYMBOL]; - if (nativeError) { - return originalFunctionToString.apply(nativeError, arguments); - } - } - } - return originalFunctionToString.apply(this, arguments); - }; - newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString; - Function.prototype.toString = newFunctionToString; - // patch Object.prototype.toString to let them look like native - var originalObjectToString = Object.prototype.toString; - var PROMISE_OBJECT_TO_STRING = '[object Promise]'; - Object.prototype.toString = function () { - if (this instanceof Promise) { - return PROMISE_OBJECT_TO_STRING; - } - return originalObjectToString.apply(this, arguments); - }; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -var passiveSupported = false; -if (typeof window !== 'undefined') { - try { - var options = Object.defineProperty({}, 'passive', { - get: function () { - passiveSupported = true; - } - }); - window.addEventListener('test', options, options); - window.removeEventListener('test', options, options); - } - catch (err) { - passiveSupported = false; - } -} -// an identifier to tell ZoneTask do not create a new invoke closure -var OPTIMIZED_ZONE_EVENT_TASK_DATA = { - useG: true -}; -var zoneSymbolEventNames$1 = {}; -var globalSources = {}; -var EVENT_NAME_SYMBOL_REGX = /^__zone_symbol__(\w+)(true|false)$/; -var IMMEDIATE_PROPAGATION_SYMBOL = ('__zone_symbol__propagationStopped'); -function patchEventTarget(_global, apis, patchOptions) { - var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR; - var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR; - var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners'; - var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners'; - var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER); - var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':'; - var PREPEND_EVENT_LISTENER = 'prependListener'; - var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':'; - var invokeTask = function (task, target, event) { - // for better performance, check isRemoved which is set - // by removeEventListener - if (task.isRemoved) { - return; - } - var delegate = task.callback; - if (typeof delegate === 'object' && delegate.handleEvent) { - // create the bind version of handleEvent when invoke - task.callback = function (event) { return delegate.handleEvent(event); }; - task.originalDelegate = delegate; - } - // invoke static task.invoke - task.invoke(task, target, [event]); - var options = task.options; - if (options && typeof options === 'object' && options.once) { - // if options.once is true, after invoke once remove listener here - // only browser need to do this, nodejs eventEmitter will cal removeListener - // inside EventEmitter.once - var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback; - target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options); - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = false - var globalZoneAwareCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - var target = this || event.target || _global; - var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - var copyTasks = tasks.slice(); - for (var i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = true - var globalZoneAwareCaptureCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - var target = this || event.target || _global; - var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - var copyTasks = tasks.slice(); - for (var i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - function patchEventTargetMethods(obj, patchOptions) { - if (!obj) { - return false; - } - var useGlobalCallback = true; - if (patchOptions && patchOptions.useG !== undefined) { - useGlobalCallback = patchOptions.useG; - } - var validateHandler = patchOptions && patchOptions.vh; - var checkDuplicate = true; - if (patchOptions && patchOptions.chkDup !== undefined) { - checkDuplicate = patchOptions.chkDup; - } - var returnTarget = false; - if (patchOptions && patchOptions.rt !== undefined) { - returnTarget = patchOptions.rt; - } - var proto = obj; - while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && obj[ADD_EVENT_LISTENER]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = obj; - } - if (!proto) { - return false; - } - if (proto[zoneSymbolAddEventListener]) { - return false; - } - var eventNameToString = patchOptions && patchOptions.eventNameToString; - // a shared global taskData to pass data for scheduleEventTask - // so we do not need to create a new object just for pass some data - var taskData = {}; - var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; - var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = - proto[REMOVE_EVENT_LISTENER]; - var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = - proto[LISTENERS_EVENT_LISTENER]; - var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; - var nativePrependEventListener; - if (patchOptions && patchOptions.prepend) { - nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] = - proto[patchOptions.prepend]; - } - function checkIsPassive(task) { - if (!passiveSupported && typeof taskData.options !== 'boolean' && - typeof taskData.options !== 'undefined' && taskData.options !== null) { - // options is a non-null non-undefined object - // passive is not supported - // don't pass options as object - // just pass capture as a boolean - task.options = !!taskData.options.capture; - taskData.options = task.options; - } - } - var customScheduleGlobal = function (task) { - // if there is already a task for the eventName + capture, - // just return, because we use the shared globalZoneAwareCallback here. - if (taskData.isExisting) { - return; - } - checkIsPassive(task); - return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options); - }; - var customCancelGlobal = function (task) { - // if task is not marked as isRemoved, this call is directly - // from Zone.prototype.cancelTask, we should remove the task - // from tasksList of target first - if (!task.isRemoved) { - var symbolEventNames = zoneSymbolEventNames$1[task.eventName]; - var symbolEventName = void 0; - if (symbolEventNames) { - symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = symbolEventName && task.target[symbolEventName]; - if (existingTasks) { - for (var i = 0; i < existingTasks.length; i++) { - var existingTask = existingTasks[i]; - if (existingTask === task) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - task.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - task.allRemoved = true; - task.target[symbolEventName] = null; - } - break; - } - } - } - } - // if all tasks for the eventName + capture have gone, - // we will really remove the global event callback, - // if not, return - if (!task.allRemoved) { - return; - } - return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options); - }; - var customScheduleNonGlobal = function (task) { - checkIsPassive(task); - return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - var customSchedulePrepend = function (task) { - return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - var customCancelNonGlobal = function (task) { - return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options); - }; - var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; - var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; - var compareTaskCallbackVsDelegate = function (task, delegate) { - var typeOfDelegate = typeof delegate; - return (typeOfDelegate === 'function' && task.callback === delegate) || - (typeOfDelegate === 'object' && task.originalDelegate === delegate); - }; - var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate; - var blackListedEvents = Zone[Zone.__symbol__('BLACK_LISTED_EVENTS')]; - var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) { - if (returnTarget === void 0) { returnTarget = false; } - if (prepend === void 0) { prepend = false; } - return function () { - var target = this || _global; - var eventName = arguments[0]; - var delegate = arguments[1]; - if (!delegate) { - return nativeListener.apply(this, arguments); - } - if (isNode && eventName === 'uncaughtException') { - // don't patch uncaughtException of nodejs to prevent endless loop - return nativeListener.apply(this, arguments); - } - // don't create the bind delegate function for handleEvent - // case here to improve addEventListener performance - // we will create the bind delegate when invoke - var isHandleEvent = false; - if (typeof delegate !== 'function') { - if (!delegate.handleEvent) { - return nativeListener.apply(this, arguments); - } - isHandleEvent = true; - } - if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { - return; - } - var options = arguments[2]; - if (blackListedEvents) { - // check black list - for (var i = 0; i < blackListedEvents.length; i++) { - if (eventName === blackListedEvents[i]) { - return nativeListener.apply(this, arguments); - } - } - } - var capture; - var once = false; - if (options === undefined) { - capture = false; - } - else if (options === true) { - capture = true; - } - else if (options === false) { - capture = false; - } - else { - capture = options ? !!options.capture : false; - once = options ? !!options.once : false; - } - var zone = Zone.current; - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - var symbolEventName; - if (!symbolEventNames) { - // the code is duplicate, but I just want to get some better performance - var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR; - var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR; - var symbol = ZONE_SYMBOL_PREFIX + falseEventName; - var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames$1[eventName] = {}; - zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture; - symbolEventName = capture ? symbolCapture : symbol; - } - else { - symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = target[symbolEventName]; - var isExisting = false; - if (existingTasks) { - // already have task registered - isExisting = true; - if (checkDuplicate) { - for (var i = 0; i < existingTasks.length; i++) { - if (compare(existingTasks[i], delegate)) { - // same callback, same capture, same event name, just return - return; - } - } - } - } - else { - existingTasks = target[symbolEventName] = []; - } - var source; - var constructorName = target.constructor['name']; - var targetSource = globalSources[constructorName]; - if (targetSource) { - source = targetSource[eventName]; - } - if (!source) { - source = constructorName + addSource + - (eventNameToString ? eventNameToString(eventName) : eventName); - } - // do not create a new object as task.data to pass those things - // just use the global shared one - taskData.options = options; - if (once) { - // if addEventListener with once options, we don't pass it to - // native addEventListener, instead we keep the once setting - // and handle ourselves. - taskData.options.once = false; - } - taskData.target = target; - taskData.capture = capture; - taskData.eventName = eventName; - taskData.isExisting = isExisting; - var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined; - // keep taskData into data to allow onScheduleEventTask to access the task information - if (data) { - data.taskData = taskData; - } - var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); - // should clear taskData.target to avoid memory leak - // issue, https://github.com/angular/angular/issues/20442 - taskData.target = null; - // need to clear up taskData because it is a global object - if (data) { - data.taskData = null; - } - // have to save those information to task in case - // application may call task.zone.cancelTask() directly - if (once) { - options.once = true; - } - if (!(!passiveSupported && typeof task.options === 'boolean')) { - // if not support passive, and we pass an option object - // to addEventListener, we should save the options to task - task.options = options; - } - task.target = target; - task.capture = capture; - task.eventName = eventName; - if (isHandleEvent) { - // save original delegate for compare to check duplicate - task.originalDelegate = delegate; - } - if (!prepend) { - existingTasks.push(task); - } - else { - existingTasks.unshift(task); - } - if (returnTarget) { - return target; - } - }; - }; - proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget); - if (nativePrependEventListener) { - proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true); - } - proto[REMOVE_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - var options = arguments[2]; - var capture; - if (options === undefined) { - capture = false; - } - else if (options === true) { - capture = true; - } - else if (options === false) { - capture = false; - } - else { - capture = options ? !!options.capture : false; - } - var delegate = arguments[1]; - if (!delegate) { - return nativeRemoveEventListener.apply(this, arguments); - } - if (validateHandler && - !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { - return; - } - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - var symbolEventName; - if (symbolEventNames) { - symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = symbolEventName && target[symbolEventName]; - if (existingTasks) { - for (var i = 0; i < existingTasks.length; i++) { - var existingTask = existingTasks[i]; - if (compare(existingTask, delegate)) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - existingTask.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - existingTask.allRemoved = true; - target[symbolEventName] = null; - } - existingTask.zone.cancelTask(existingTask); - if (returnTarget) { - return target; - } - return; - } - } - } - // issue 930, didn't find the event name or callback - // from zone kept existingTasks, the callback maybe - // added outside of zone, we need to call native removeEventListener - // to try to remove it. - return nativeRemoveEventListener.apply(this, arguments); - }; - proto[LISTENERS_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - var listeners = []; - var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName); - for (var i = 0; i < tasks.length; i++) { - var task = tasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - listeners.push(delegate); - } - return listeners; - }; - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - if (!eventName) { - var keys = Object.keys(target); - for (var i = 0; i < keys.length; i++) { - var prop = keys[i]; - var match = EVENT_NAME_SYMBOL_REGX.exec(prop); - var evtName = match && match[1]; - // in nodejs EventEmitter, removeListener event is - // used for monitoring the removeListener call, - // so just keep removeListener eventListener until - // all other eventListeners are removed - if (evtName && evtName !== 'removeListener') { - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName); - } - } - // remove removeListener listener finally - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener'); - } - else { - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - if (symbolEventNames) { - var symbolEventName = symbolEventNames[FALSE_STR]; - var symbolCaptureEventName = symbolEventNames[TRUE_STR]; - var tasks = target[symbolEventName]; - var captureTasks = target[symbolCaptureEventName]; - if (tasks) { - var removeTasks = tasks.slice(); - for (var i = 0; i < removeTasks.length; i++) { - var task = removeTasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - if (captureTasks) { - var removeTasks = captureTasks.slice(); - for (var i = 0; i < removeTasks.length; i++) { - var task = removeTasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - } - } - if (returnTarget) { - return this; - } - }; - // for native toString patch - attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); - attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); - if (nativeRemoveAllListeners) { - attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); - } - if (nativeListeners) { - attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); - } - return true; - } - var results = []; - for (var i = 0; i < apis.length; i++) { - results[i] = patchEventTargetMethods(apis[i], patchOptions); - } - return results; -} -function findEventTasks(target, eventName) { - var foundTasks = []; - for (var prop in target) { - var match = EVENT_NAME_SYMBOL_REGX.exec(prop); - var evtName = match && match[1]; - if (evtName && (!eventName || evtName === eventName)) { - var tasks = target[prop]; - if (tasks) { - for (var i = 0; i < tasks.length; i++) { - foundTasks.push(tasks[i]); - } - } - } - } - return foundTasks; -} -function patchEventPrototype(global, api) { - var Event = global['Event']; - if (Event && Event.prototype) { - api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) { - self[IMMEDIATE_PROPAGATION_SYMBOL] = true; - // we need to call the native stopImmediatePropagation - // in case in some hybrid application, some part of - // application will be controlled by zone, some are not - delegate && delegate.apply(self, args); - }; }); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -var taskSymbol = zoneSymbol('zoneTask'); -function patchTimer(window, setName, cancelName, nameSuffix) { - var setNative = null; - var clearNative = null; - setName += nameSuffix; - cancelName += nameSuffix; - var tasksByHandleId = {}; - function scheduleTask(task) { - var data = task.data; - function timer() { - try { - task.invoke.apply(this, arguments); - } - finally { - // issue-934, task will be cancelled - // even it is a periodic task such as - // setInterval - if (!(task.data && task.data.isPeriodic)) { - if (typeof data.handleId === 'number') { - // in non-nodejs env, we remove timerId - // from local cache - delete tasksByHandleId[data.handleId]; - } - else if (data.handleId) { - // Node returns complex objects as handleIds - // we remove task reference from timer object - data.handleId[taskSymbol] = null; - } - } - } - } - data.args[0] = timer; - data.handleId = setNative.apply(window, data.args); - return task; - } - function clearTask(task) { - return clearNative(task.data.handleId); - } - setNative = - patchMethod(window, setName, function (delegate) { return function (self, args) { - if (typeof args[0] === 'function') { - var options = { - isPeriodic: nameSuffix === 'Interval', - delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 : - undefined, - args: args - }; - var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask); - if (!task) { - return task; - } - // Node.js must additionally support the ref and unref functions. - var handle = task.data.handleId; - if (typeof handle === 'number') { - // for non nodejs env, we save handleId: task - // mapping in local cache for clearTimeout - tasksByHandleId[handle] = task; - } - else if (handle) { - // for nodejs env, we save task - // reference in timerId Object for clearTimeout - handle[taskSymbol] = task; - } - // check whether handle is null, because some polyfill or browser - // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame - if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' && - typeof handle.unref === 'function') { - task.ref = handle.ref.bind(handle); - task.unref = handle.unref.bind(handle); - } - if (typeof handle === 'number' || handle) { - return handle; - } - return task; - } - else { - // cause an error by calling it directly. - return delegate.apply(window, args); - } - }; }); - clearNative = - patchMethod(window, cancelName, function (delegate) { return function (self, args) { - var id = args[0]; - var task; - if (typeof id === 'number') { - // non nodejs env. - task = tasksByHandleId[id]; - } - else { - // nodejs env. - task = id && id[taskSymbol]; - // other environments. - if (!task) { - task = id; - } - } - if (task && typeof task.type === 'string') { - if (task.state !== 'notScheduled' && - (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) { - if (typeof id === 'number') { - delete tasksByHandleId[id]; - } - else if (id) { - id[taskSymbol] = null; - } - // Do not cancel already canceled functions - task.zone.cancelTask(task); - } - } - else { - // cause an error by calling it directly. - delegate.apply(window, args); - } - }; }); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/* - * This is necessary for Chrome and Chrome mobile, to enable - * things like redefining `createdCallback` on an element. - */ -var _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty; -var _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] = - Object.getOwnPropertyDescriptor; -var _create = Object.create; -var unconfigurablesKey = zoneSymbol('unconfigurables'); -function propertyPatch() { - Object.defineProperty = function (obj, prop, desc) { - if (isUnconfigurable(obj, prop)) { - throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj); - } - var originalConfigurableFlag = desc.configurable; - if (prop !== 'prototype') { - desc = rewriteDescriptor(obj, prop, desc); - } - return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag); - }; - Object.defineProperties = function (obj, props) { - Object.keys(props).forEach(function (prop) { - Object.defineProperty(obj, prop, props[prop]); - }); - return obj; - }; - Object.create = function (obj, proto) { - if (typeof proto === 'object' && !Object.isFrozen(proto)) { - Object.keys(proto).forEach(function (prop) { - proto[prop] = rewriteDescriptor(obj, prop, proto[prop]); - }); - } - return _create(obj, proto); - }; - Object.getOwnPropertyDescriptor = function (obj, prop) { - var desc = _getOwnPropertyDescriptor(obj, prop); - if (desc && isUnconfigurable(obj, prop)) { - desc.configurable = false; - } - return desc; - }; -} -function _redefineProperty(obj, prop, desc) { - var originalConfigurableFlag = desc.configurable; - desc = rewriteDescriptor(obj, prop, desc); - return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag); -} -function isUnconfigurable(obj, prop) { - return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop]; -} -function rewriteDescriptor(obj, prop, desc) { - // issue-927, if the desc is frozen, don't try to change the desc - if (!Object.isFrozen(desc)) { - desc.configurable = true; - } - if (!desc.configurable) { - // issue-927, if the obj is frozen, don't try to set the desc to obj - if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) { - _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} }); - } - if (obj[unconfigurablesKey]) { - obj[unconfigurablesKey][prop] = true; - } - } - return desc; -} -function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) { - try { - return _defineProperty(obj, prop, desc); - } - catch (error) { - if (desc.configurable) { - // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's - // retry with the original flag value - if (typeof originalConfigurableFlag == 'undefined') { - delete desc.configurable; - } - else { - desc.configurable = originalConfigurableFlag; - } - try { - return _defineProperty(obj, prop, desc); - } - catch (error) { - var descJson = null; - try { - descJson = JSON.stringify(desc); - } - catch (error) { - descJson = desc.toString(); - } - console.log("Attempting to configure '" + prop + "' with descriptor '" + descJson + "' on object '" + obj + "' and got error, giving up: " + error); - } - } - else { - throw error; - } - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// we have to patch the instance since the proto is non-configurable -function apply(api, _global) { - var WS = _global.WebSocket; - // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener - // On older Chrome, no need since EventTarget was already patched - if (!_global.EventTarget) { - patchEventTarget(_global, [WS.prototype]); - } - _global.WebSocket = function (x, y) { - var socket = arguments.length > 1 ? new WS(x, y) : new WS(x); - var proxySocket; - var proxySocketProto; - // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance - var onmessageDesc = ObjectGetOwnPropertyDescriptor(socket, 'onmessage'); - if (onmessageDesc && onmessageDesc.configurable === false) { - proxySocket = ObjectCreate(socket); - // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror' - // but proxySocket not, so we will keep socket as prototype and pass it to - // patchOnProperties method - proxySocketProto = socket; - [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) { - proxySocket[propName] = function () { - var args = ArraySlice.call(arguments); - if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) { - var eventName = args.length > 0 ? args[0] : undefined; - if (eventName) { - var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName); - socket[propertySymbol] = proxySocket[propertySymbol]; - } - } - return socket[propName].apply(socket, args); - }; - }); - } - else { - // we can patch the real socket - proxySocket = socket; - } - patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto); - return proxySocket; - }; - var globalWebSocket = _global['WebSocket']; - for (var prop in WS) { - globalWebSocket[prop] = WS[prop]; - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {globalThis} - */ -var globalEventHandlersEventNames = [ - 'abort', - 'animationcancel', - 'animationend', - 'animationiteration', - 'auxclick', - 'beforeinput', - 'blur', - 'cancel', - 'canplay', - 'canplaythrough', - 'change', - 'compositionstart', - 'compositionupdate', - 'compositionend', - 'cuechange', - 'click', - 'close', - 'contextmenu', - 'curechange', - 'dblclick', - 'drag', - 'dragend', - 'dragenter', - 'dragexit', - 'dragleave', - 'dragover', - 'drop', - 'durationchange', - 'emptied', - 'ended', - 'error', - 'focus', - 'focusin', - 'focusout', - 'gotpointercapture', - 'input', - 'invalid', - 'keydown', - 'keypress', - 'keyup', - 'load', - 'loadstart', - 'loadeddata', - 'loadedmetadata', - 'lostpointercapture', - 'mousedown', - 'mouseenter', - 'mouseleave', - 'mousemove', - 'mouseout', - 'mouseover', - 'mouseup', - 'mousewheel', - 'orientationchange', - 'pause', - 'play', - 'playing', - 'pointercancel', - 'pointerdown', - 'pointerenter', - 'pointerleave', - 'pointerlockchange', - 'mozpointerlockchange', - 'webkitpointerlockerchange', - 'pointerlockerror', - 'mozpointerlockerror', - 'webkitpointerlockerror', - 'pointermove', - 'pointout', - 'pointerover', - 'pointerup', - 'progress', - 'ratechange', - 'reset', - 'resize', - 'scroll', - 'seeked', - 'seeking', - 'select', - 'selectionchange', - 'selectstart', - 'show', - 'sort', - 'stalled', - 'submit', - 'suspend', - 'timeupdate', - 'volumechange', - 'touchcancel', - 'touchmove', - 'touchstart', - 'touchend', - 'transitioncancel', - 'transitionend', - 'waiting', - 'wheel' -]; -var documentEventNames = [ - 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange', - 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror', - 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange', - 'visibilitychange', 'resume' -]; -var windowEventNames = [ - 'absolutedeviceorientation', - 'afterinput', - 'afterprint', - 'appinstalled', - 'beforeinstallprompt', - 'beforeprint', - 'beforeunload', - 'devicelight', - 'devicemotion', - 'deviceorientation', - 'deviceorientationabsolute', - 'deviceproximity', - 'hashchange', - 'languagechange', - 'message', - 'mozbeforepaint', - 'offline', - 'online', - 'paint', - 'pageshow', - 'pagehide', - 'popstate', - 'rejectionhandled', - 'storage', - 'unhandledrejection', - 'unload', - 'userproximity', - 'vrdisplyconnected', - 'vrdisplaydisconnected', - 'vrdisplaypresentchange' -]; -var htmlElementEventNames = [ - 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend', - 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend', - 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend' -]; -var mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend']; -var ieElementEventNames = [ - 'activate', - 'afterupdate', - 'ariarequest', - 'beforeactivate', - 'beforedeactivate', - 'beforeeditfocus', - 'beforeupdate', - 'cellchange', - 'controlselect', - 'dataavailable', - 'datasetchanged', - 'datasetcomplete', - 'errorupdate', - 'filterchange', - 'layoutcomplete', - 'losecapture', - 'move', - 'moveend', - 'movestart', - 'propertychange', - 'resizeend', - 'resizestart', - 'rowenter', - 'rowexit', - 'rowsdelete', - 'rowsinserted', - 'command', - 'compassneedscalibration', - 'deactivate', - 'help', - 'mscontentzoom', - 'msmanipulationstatechanged', - 'msgesturechange', - 'msgesturedoubletap', - 'msgestureend', - 'msgesturehold', - 'msgesturestart', - 'msgesturetap', - 'msgotpointercapture', - 'msinertiastart', - 'mslostpointercapture', - 'mspointercancel', - 'mspointerdown', - 'mspointerenter', - 'mspointerhover', - 'mspointerleave', - 'mspointermove', - 'mspointerout', - 'mspointerover', - 'mspointerup', - 'pointerout', - 'mssitemodejumplistitemremoved', - 'msthumbnailclick', - 'stop', - 'storagecommit' -]; -var webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror']; -var formEventNames = ['autocomplete', 'autocompleteerror']; -var detailEventNames = ['toggle']; -var frameEventNames = ['load']; -var frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror']; -var marqueeEventNames = ['bounce', 'finish', 'start']; -var XMLHttpRequestEventNames = [ - 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend', - 'readystatechange' -]; -var IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close']; -var websocketEventNames = ['close', 'error', 'open', 'message']; -var workerEventNames = ['error', 'message']; -var eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames); -function filterProperties(target, onProperties, ignoreProperties) { - if (!ignoreProperties || ignoreProperties.length === 0) { - return onProperties; - } - var tip = ignoreProperties.filter(function (ip) { return ip.target === target; }); - if (!tip || tip.length === 0) { - return onProperties; - } - var targetIgnoreProperties = tip[0].ignoreProperties; - return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; }); -} -function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) { - // check whether target is available, sometimes target will be undefined - // because different browser or some 3rd party plugin. - if (!target) { - return; - } - var filteredProperties = filterProperties(target, onProperties, ignoreProperties); - patchOnProperties(target, filteredProperties, prototype); -} -function propertyDescriptorPatch(api, _global) { - if (isNode && !isMix) { - return; - } - var supportsWebSocket = typeof WebSocket !== 'undefined'; - if (canPatchViaPropertyDescriptor()) { - var ignoreProperties = _global['__Zone_ignore_on_properties']; - // for browsers that we can patch the descriptor: Chrome & Firefox - if (isBrowser) { - var internalWindow = window; - var ignoreErrorProperties = isIE ? [{ target: internalWindow, ignoreProperties: ['error'] }] : []; - // in IE/Edge, onProp not exist in window object, but in WindowPrototype - // so we need to pass WindowPrototype to check onProp exist or not - patchFilteredProperties(internalWindow, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow)); - patchFilteredProperties(Document.prototype, eventNames, ignoreProperties); - if (typeof internalWindow['SVGElement'] !== 'undefined') { - patchFilteredProperties(internalWindow['SVGElement'].prototype, eventNames, ignoreProperties); - } - patchFilteredProperties(Element.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties); - patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties); - patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties); - var HTMLMarqueeElement_1 = internalWindow['HTMLMarqueeElement']; - if (HTMLMarqueeElement_1) { - patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties); - } - var Worker_1 = internalWindow['Worker']; - if (Worker_1) { - patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties); - } - } - patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties); - var XMLHttpRequestEventTarget_1 = _global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget_1) { - patchFilteredProperties(XMLHttpRequestEventTarget_1 && XMLHttpRequestEventTarget_1.prototype, XMLHttpRequestEventNames, ignoreProperties); - } - if (typeof IDBIndex !== 'undefined') { - patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties); - } - if (supportsWebSocket) { - patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties); - } - } - else { - // Safari, Android browsers (Jelly Bean) - patchViaCapturingAllTheEvents(); - patchClass('XMLHttpRequest'); - if (supportsWebSocket) { - apply(api, _global); - } - } -} -function canPatchViaPropertyDescriptor() { - if ((isBrowser || isMix) && !ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') && - typeof Element !== 'undefined') { - // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364 - // IDL interface attributes are not configurable - var desc = ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick'); - if (desc && !desc.configurable) - return false; - } - var ON_READY_STATE_CHANGE = 'onreadystatechange'; - var XMLHttpRequestPrototype = XMLHttpRequest.prototype; - var xhrDesc = ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE); - // add enumerable and configurable here because in opera - // by default XMLHttpRequest.prototype.onreadystatechange is undefined - // without adding enumerable and configurable will cause onreadystatechange - // non-configurable - // and if XMLHttpRequest.prototype.onreadystatechange is undefined, - // we should set a real desc instead a fake one - if (xhrDesc) { - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, { - enumerable: true, - configurable: true, - get: function () { - return true; - } - }); - var req = new XMLHttpRequest(); - var result = !!req.onreadystatechange; - // restore original desc - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {}); - return result; - } - else { - var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = zoneSymbol('fake'); - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, { - enumerable: true, - configurable: true, - get: function () { - return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1]; - }, - set: function (value) { - this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value; - } - }); - var req = new XMLHttpRequest(); - var detectFunc = function () { }; - req.onreadystatechange = detectFunc; - var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc; - req.onreadystatechange = null; - return result; - } -} -var unboundKey = zoneSymbol('unbound'); -// Whenever any eventListener fires, we check the eventListener target and all parents -// for `onwhatever` properties and replace them with zone-bound functions -// - Chrome (for now) -function patchViaCapturingAllTheEvents() { - var _loop_1 = function (i) { - var property = eventNames[i]; - var onproperty = 'on' + property; - self.addEventListener(property, function (event) { - var elt = event.target, bound, source; - if (elt) { - source = elt.constructor['name'] + '.' + onproperty; - } - else { - source = 'unknown.' + onproperty; - } - while (elt) { - if (elt[onproperty] && !elt[onproperty][unboundKey]) { - bound = wrapWithCurrentZone(elt[onproperty], source); - bound[unboundKey] = elt[onproperty]; - elt[onproperty] = bound; - } - elt = elt.parentElement; - } - }, true); - }; - for (var i = 0; i < eventNames.length; i++) { - _loop_1(i); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function eventTargetPatch(_global, api) { - var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video'; - var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket' - .split(','); - var EVENT_TARGET = 'EventTarget'; - var apis = []; - var isWtf = _global['wtf']; - var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(','); - if (isWtf) { - // Workaround for: https://github.com/google/tracing-framework/issues/555 - apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET); - } - else if (_global[EVENT_TARGET]) { - apis.push(EVENT_TARGET); - } - else { - // Note: EventTarget is not available in all browsers, - // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget - apis = NO_EVENT_TARGET; - } - var isDisableIECheck = _global['__Zone_disable_IE_check'] || false; - var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false; - var ieOrEdge = isIEOrEdge(); - var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:'; - var FUNCTION_WRAPPER = '[object FunctionWrapper]'; - var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }'; - // predefine all __zone_symbol__ + eventName + true/false string - for (var i = 0; i < eventNames.length; i++) { - var eventName = eventNames[i]; - var falseEventName = eventName + FALSE_STR; - var trueEventName = eventName + TRUE_STR; - var symbol = ZONE_SYMBOL_PREFIX + falseEventName; - var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames$1[eventName] = {}; - zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture; - } - // predefine all task.source string - for (var i = 0; i < WTF_ISSUE_555.length; i++) { - var target = WTF_ISSUE_555_ARRAY[i]; - var targets = globalSources[target] = {}; - for (var j = 0; j < eventNames.length; j++) { - var eventName = eventNames[j]; - targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName; - } - } - var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) { - if (!isDisableIECheck && ieOrEdge) { - if (isEnableCrossContextCheck) { - try { - var testString = delegate.toString(); - if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) { - nativeDelegate.apply(target, args); - return false; - } - } - catch (error) { - nativeDelegate.apply(target, args); - return false; - } - } - else { - var testString = delegate.toString(); - if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) { - nativeDelegate.apply(target, args); - return false; - } - } - } - else if (isEnableCrossContextCheck) { - try { - delegate.toString(); - } - catch (error) { - nativeDelegate.apply(target, args); - return false; - } - } - return true; - }; - var apiTypes = []; - for (var i = 0; i < apis.length; i++) { - var type = _global[apis[i]]; - apiTypes.push(type && type.prototype); - } - // vh is validateHandler to check event handler - // is valid or not(for security check) - patchEventTarget(_global, apiTypes, { vh: checkIEAndCrossContext }); - api.patchEventTarget = patchEventTarget; - return true; -} -function patchEvent(global, api) { - patchEventPrototype(global, api); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function patchCallbacks(target, targetName, method, callbacks) { - var symbol = Zone.__symbol__(method); - if (target[symbol]) { - return; - } - var nativeDelegate = target[symbol] = target[method]; - target[method] = function (name, opts, options) { - if (opts && opts.prototype) { - callbacks.forEach(function (callback) { - var source = targetName + "." + method + "::" + callback; - var prototype = opts.prototype; - if (prototype.hasOwnProperty(callback)) { - var descriptor = ObjectGetOwnPropertyDescriptor(prototype, callback); - if (descriptor && descriptor.value) { - descriptor.value = wrapWithCurrentZone(descriptor.value, source); - _redefineProperty(opts.prototype, callback, descriptor); - } - else if (prototype[callback]) { - prototype[callback] = wrapWithCurrentZone(prototype[callback], source); - } - } - else if (prototype[callback]) { - prototype[callback] = wrapWithCurrentZone(prototype[callback], source); - } - }); - } - return nativeDelegate.call(target, name, opts, options); - }; - attachOriginToPatched(target[method], nativeDelegate); -} -function registerElementPatch(_global) { - if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) { - return; - } - var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback']; - patchCallbacks(document, 'Document', 'registerElement', callbacks); -} -function patchCustomElements(_global) { - if ((!isBrowser && !isMix) || !('customElements' in _global)) { - return; - } - var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback']; - patchCallbacks(_global.customElements, 'customElements', 'define', callbacks); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -Zone.__load_patch('util', function (global, Zone, api) { - api.patchOnProperties = patchOnProperties; - api.patchMethod = patchMethod; - api.bindArguments = bindArguments; -}); -Zone.__load_patch('timers', function (global) { - var set = 'set'; - var clear = 'clear'; - patchTimer(global, set, clear, 'Timeout'); - patchTimer(global, set, clear, 'Interval'); - patchTimer(global, set, clear, 'Immediate'); -}); -Zone.__load_patch('requestAnimationFrame', function (global) { - patchTimer(global, 'request', 'cancel', 'AnimationFrame'); - patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame'); - patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame'); -}); -Zone.__load_patch('blocking', function (global, Zone) { - var blockingMethods = ['alert', 'prompt', 'confirm']; - for (var i = 0; i < blockingMethods.length; i++) { - var name_1 = blockingMethods[i]; - patchMethod(global, name_1, function (delegate, symbol, name) { - return function (s, args) { - return Zone.current.run(delegate, global, args, name); - }; - }); - } -}); -Zone.__load_patch('EventTarget', function (global, Zone, api) { - // load blackListEvents from global - var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS'); - if (global[SYMBOL_BLACK_LISTED_EVENTS]) { - Zone[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS]; - } - patchEvent(global, api); - eventTargetPatch(global, api); - // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener - var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { - api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]); - } - patchClass('MutationObserver'); - patchClass('WebKitMutationObserver'); - patchClass('IntersectionObserver'); - patchClass('FileReader'); -}); -Zone.__load_patch('on_property', function (global, Zone, api) { - propertyDescriptorPatch(api, global); - propertyPatch(); -}); -Zone.__load_patch('customElements', function (global, Zone, api) { - registerElementPatch(global); - patchCustomElements(global); -}); -Zone.__load_patch('canvas', function (global) { - var HTMLCanvasElement = global['HTMLCanvasElement']; - if (typeof HTMLCanvasElement !== 'undefined' && HTMLCanvasElement.prototype && - HTMLCanvasElement.prototype.toBlob) { - patchMacroTask(HTMLCanvasElement.prototype, 'toBlob', function (self, args) { - return { name: 'HTMLCanvasElement.toBlob', target: self, cbIdx: 0, args: args }; - }); - } -}); -Zone.__load_patch('XHR', function (global, Zone) { - // Treat XMLHttpRequest as a macrotask. - patchXHR(global); - var XHR_TASK = zoneSymbol('xhrTask'); - var XHR_SYNC = zoneSymbol('xhrSync'); - var XHR_LISTENER = zoneSymbol('xhrListener'); - var XHR_SCHEDULED = zoneSymbol('xhrScheduled'); - var XHR_URL = zoneSymbol('xhrURL'); - var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled'); - function patchXHR(window) { - var XMLHttpRequestPrototype = XMLHttpRequest.prototype; - function findPendingTask(target) { - return target[XHR_TASK]; - } - var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - if (!oriAddListener) { - var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget_1) { - var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype; - oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - } - var READY_STATE_CHANGE = 'readystatechange'; - var SCHEDULED = 'scheduled'; - function scheduleTask(task) { - var data = task.data; - var target = data.target; - target[XHR_SCHEDULED] = false; - target[XHR_ERROR_BEFORE_SCHEDULED] = false; - // remove existing event listener - var listener = target[XHR_LISTENER]; - if (!oriAddListener) { - oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - if (listener) { - oriRemoveListener.call(target, READY_STATE_CHANGE, listener); - } - var newListener = target[XHR_LISTENER] = function () { - if (target.readyState === target.DONE) { - // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with - // readyState=4 multiple times, so we need to check task state here - if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) { - // check whether the xhr has registered onload listener - // if that is the case, the task should invoke after all - // onload listeners finish. - var loadTasks = target['__zone_symbol__loadfalse']; - if (loadTasks && loadTasks.length > 0) { - var oriInvoke_1 = task.invoke; - task.invoke = function () { - // need to load the tasks again, because in other - // load listener, they may remove themselves - var loadTasks = target['__zone_symbol__loadfalse']; - for (var i = 0; i < loadTasks.length; i++) { - if (loadTasks[i] === task) { - loadTasks.splice(i, 1); - } - } - if (!data.aborted && task.state === SCHEDULED) { - oriInvoke_1.call(task); - } - }; - loadTasks.push(task); - } - else { - task.invoke(); - } - } - else if (!data.aborted && target[XHR_SCHEDULED] === false) { - // error occurs when xhr.send() - target[XHR_ERROR_BEFORE_SCHEDULED] = true; - } - } - }; - oriAddListener.call(target, READY_STATE_CHANGE, newListener); - var storedTask = target[XHR_TASK]; - if (!storedTask) { - target[XHR_TASK] = task; - } - sendNative.apply(target, data.args); - target[XHR_SCHEDULED] = true; - return task; - } - function placeholderCallback() { } - function clearTask(task) { - var data = task.data; - // Note - ideally, we would call data.target.removeEventListener here, but it's too late - // to prevent it from firing. So instead, we store info for the event listener. - data.aborted = true; - return abortNative.apply(data.target, data.args); - } - var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) { - self[XHR_SYNC] = args[2] == false; - self[XHR_URL] = args[1]; - return openNative.apply(self, args); - }; }); - var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send'; - var fetchTaskAborting = zoneSymbol('fetchTaskAborting'); - var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling'); - var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) { - if (Zone.current[fetchTaskScheduling] === true) { - // a fetch is scheduling, so we are using xhr to polyfill fetch - // and because we already schedule macroTask for fetch, we should - // not schedule a macroTask for xhr again - return sendNative.apply(self, args); - } - if (self[XHR_SYNC]) { - // if the XHR is sync there is no task to schedule, just execute the code. - return sendNative.apply(self, args); - } - else { - var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false }; - var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask); - if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted && - task.state === SCHEDULED) { - // xhr request throw error when send - // we should invoke task instead of leaving a scheduled - // pending macroTask - task.invoke(); - } - } - }; }); - var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) { - var task = findPendingTask(self); - if (task && typeof task.type == 'string') { - // If the XHR has already completed, do nothing. - // If the XHR has already been aborted, do nothing. - // Fix #569, call abort multiple times before done will cause - // macroTask task count be negative number - if (task.cancelFn == null || (task.data && task.data.aborted)) { - return; - } - task.zone.cancelTask(task); - } - else if (Zone.current[fetchTaskAborting] === true) { - // the abort is called from fetch polyfill, we need to call native abort of XHR. - return abortNative.apply(self, args); - } - // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no - // task - // to cancel. Do nothing. - }; }); - } -}); -Zone.__load_patch('geolocation', function (global) { - /// GEO_LOCATION - if (global['navigator'] && global['navigator'].geolocation) { - patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']); - } -}); -Zone.__load_patch('PromiseRejectionEvent', function (global, Zone) { - // handle unhandled promise rejection - function findPromiseRejectionHandler(evtName) { - return function (e) { - var eventTasks = findEventTasks(global, evtName); - eventTasks.forEach(function (eventTask) { - // windows has added unhandledrejection event listener - // trigger the event listener - var PromiseRejectionEvent = global['PromiseRejectionEvent']; - if (PromiseRejectionEvent) { - var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection }); - eventTask.invoke(evt); - } - }); - }; - } - if (global['PromiseRejectionEvent']) { - Zone[zoneSymbol('unhandledPromiseRejectionHandler')] = - findPromiseRejectionHandler('unhandledrejection'); - Zone[zoneSymbol('rejectionHandledHandler')] = - findPromiseRejectionHandler('rejectionhandled'); - } -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -}))); - - -/***/ }), - -/***/ "./src/polyfills.ts": -/*!**************************!*\ - !*** ./src/polyfills.ts ***! - \**************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zone.js/dist/zone */ "./node_modules/zone.js/dist/zone.js"); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0__); -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ -/*************************************************************************************************** - * BROWSER POLYFILLS - */ -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/weak-map'; -// import 'core-js/es6/set'; -/** - * If the application will be indexed by Google Search, the following is required. - * Googlebot uses a renderer based on Chrome 41. - * https://developers.google.com/search/docs/guides/rendering - **/ -// import 'core-js/es6/array'; -//global.Buffer = global.Buffer || require('buffer').Buffer; -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. -/** IE10 and IE11 requires the following for the Reflect API. */ -// import 'core-js/es6/reflect'; -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - */ -// (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame -// (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick -// (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames -/* -* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js -* with the following flag, it will bypass `zone.js` patch for IE/Edge -*/ -// (window as any).__Zone_enable_cross_context_check = true; -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ - // Included with Angular CLI. -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - - -/***/ }), - -/***/ 1: -/*!***************************************************************************************************************************!*\ - !*** multi ./src/polyfills.ts ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \***************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! /app/src/polyfills.ts */"./src/polyfills.ts"); -module.exports = __webpack_require__(/*! /app/node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js */"./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js"); - - -/***/ }) - -},[[1,"runtime"]]]); -//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/polyfills.js.map b/internals/WebUI/dist/WebUI/polyfills.js.map deleted file mode 100644 index 180d8ce..0000000 --- a/internals/WebUI/dist/WebUI/polyfills.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js","webpack:///./node_modules/core-js/es7/reflect.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_array-from-iterable.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///./node_modules/core-js/modules/_metadata.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es7.reflect.define-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.delete-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-own-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.has-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.has-own-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.metadata.js","webpack:///./node_modules/zone.js/dist/zone.js","webpack:///./src/polyfills.ts"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAC6B;;;;;;;;;;;;ACP7B,mBAAO,CAAC,6GAAwC;AAChD,mBAAO,CAAC,6GAAwC;AAChD,mBAAO,CAAC,uGAAqC;AAC7C,mBAAO,CAAC,iHAA0C;AAClD,mBAAO,CAAC,+GAAyC;AACjD,mBAAO,CAAC,yHAA8C;AACtD,mBAAO,CAAC,uGAAqC;AAC7C,mBAAO,CAAC,+GAAyC;AACjD,mBAAO,CAAC,+FAAiC;AACzC,iBAAiB,mBAAO,CAAC,iEAAkB;;;;;;;;;;;;ACT3C;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACJA,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;AACA;AACA;;;;;;;;;;;;ACJA,YAAY,mBAAO,CAAC,4DAAW;;AAE/B;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,eAAe,mBAAO,CAAC,kEAAc;AACrC,sBAAsB,mBAAO,CAAC,kFAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY,eAAe;AAChC;AACA,KAAK;AACL;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,cAAc,mBAAO,CAAC,8DAAY;AAClC,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,UAAU,mBAAO,CAAC,wFAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,eAAe;AACzB;AACA;AACA;AACA,wCAAwC;AACxC;AACA,8BAA8B;AAC9B,6BAA6B;AAC7B,+BAA+B;AAC/B,mCAAmC;AACnC,SAAS,iCAAiC;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA,eAAe,mBAAO,CAAC,kEAAc;AACrC,cAAc,mBAAO,CAAC,gEAAa;AACnC,cAAc,mBAAO,CAAC,sDAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACfA;AACA,yBAAyB,mBAAO,CAAC,kGAA8B;;AAE/D;AACA;AACA;;;;;;;;;;;;ACLA;AACA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,UAAU,mBAAO,CAAC,sDAAQ;AAC1B;AACA,2BAA2B,kBAAkB,EAAE;;AAE/C;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;;ACJa;AACb,SAAS,mBAAO,CAAC,kEAAc;AAC/B,aAAa,mBAAO,CAAC,0EAAkB;AACvC,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,YAAY,mBAAO,CAAC,4DAAW;AAC/B,kBAAkB,mBAAO,CAAC,sEAAgB;AAC1C,WAAW,mBAAO,CAAC,kEAAc;AACjC,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,kBAAkB,mBAAO,CAAC,sEAAgB;AAC1C,cAAc,mBAAO,CAAC,wDAAS;AAC/B,eAAe,mBAAO,CAAC,sFAAwB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,cAAc,mBAAO,CAAC,wDAAS;AAC/B,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,YAAY,mBAAO,CAAC,4DAAW;AAC/B,wBAAwB,mBAAO,CAAC,0EAAkB;AAClD,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,sFAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;ACpFa;AACb,aAAa,mBAAO,CAAC,4DAAW;AAChC,cAAc,mBAAO,CAAC,4DAAW;AACjC,eAAe,mBAAO,CAAC,gEAAa;AACpC,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,WAAW,mBAAO,CAAC,wDAAS;AAC5B,YAAY,mBAAO,CAAC,4DAAW;AAC/B,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,eAAe,mBAAO,CAAC,kEAAc;AACrC,YAAY,mBAAO,CAAC,0DAAU;AAC9B,kBAAkB,mBAAO,CAAC,sEAAgB;AAC1C,qBAAqB,mBAAO,CAAC,kFAAsB;AACnD,wBAAwB,mBAAO,CAAC,sFAAwB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,mCAAmC,gCAAgC,aAAa;AACvF,8BAA8B,mCAAmC,aAAa;AAC9E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qDAAqD;AACrD;AACA,kDAAkD,iBAAiB,EAAE;AACrE;AACA,wDAAwD,aAAa,EAAE,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;;ACpFA,6BAA6B;AAC7B,uCAAuC;;;;;;;;;;;;ACDvC;AACA,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA,kBAAkB,mBAAO,CAAC,0DAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;;;;;ACHD,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,4DAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;;;;;;;;;;;ACHA,aAAa,mBAAO,CAAC,4DAAW;AAChC,WAAW,mBAAO,CAAC,wDAAS;AAC5B,WAAW,mBAAO,CAAC,wDAAS;AAC5B,eAAe,mBAAO,CAAC,gEAAa;AACpC,UAAU,mBAAO,CAAC,sDAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;AC1CA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;ACNA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,WAAW,mBAAO,CAAC,kEAAc;AACjC,kBAAkB,mBAAO,CAAC,0EAAkB;AAC5C,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,gBAAgB,mBAAO,CAAC,8FAA4B;AACpD;AACA;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA,mEAAmE,gBAAgB;AACnF;AACA;AACA,GAAG,4CAA4C,gCAAgC;AAC/E;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA,iBAAiB,mBAAO,CAAC,4DAAW;;;;;;;;;;;;ACApC;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;;;;;;ACLzC,uBAAuB;AACvB;AACA;AACA;;;;;;;;;;;;ACHA,SAAS,mBAAO,CAAC,kEAAc;AAC/B,iBAAiB,mBAAO,CAAC,0EAAkB;AAC3C,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;;;;;;ACPA,eAAe,mBAAO,CAAC,4DAAW;AAClC;;;;;;;;;;;;ACDA,kBAAkB,mBAAO,CAAC,sEAAgB,MAAM,mBAAO,CAAC,0DAAU;AAClE,+BAA+B,mBAAO,CAAC,oEAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;;;;;;ACFD,eAAe,mBAAO,CAAC,kEAAc;AACrC,qBAAqB,mBAAO,CAAC,kEAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACRA;AACA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA,gBAAgB,mBAAO,CAAC,kEAAc;AACtC,eAAe,mBAAO,CAAC,sDAAQ;AAC/B;;AAEA;AACA;AACA;;;;;;;;;;;;ACPA;AACA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;;;;;;;;;;;;ACFA;AACA,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACXa;AACb,aAAa,mBAAO,CAAC,0EAAkB;AACvC,iBAAiB,mBAAO,CAAC,0EAAkB;AAC3C,qBAAqB,mBAAO,CAAC,kFAAsB;AACnD;;AAEA;AACA,mBAAO,CAAC,wDAAS,qBAAqB,mBAAO,CAAC,sDAAQ,4BAA4B,aAAa,EAAE;;AAEjG;AACA,qDAAqD,4BAA4B;AACjF;AACA;;;;;;;;;;;;;ACZa;AACb,cAAc,mBAAO,CAAC,8DAAY;AAClC,cAAc,mBAAO,CAAC,4DAAW;AACjC,eAAe,mBAAO,CAAC,gEAAa;AACpC,WAAW,mBAAO,CAAC,wDAAS;AAC5B,gBAAgB,mBAAO,CAAC,kEAAc;AACtC,kBAAkB,mBAAO,CAAC,sEAAgB;AAC1C,qBAAqB,mBAAO,CAAC,kFAAsB;AACnD,qBAAqB,mBAAO,CAAC,oEAAe;AAC5C,eAAe,mBAAO,CAAC,sDAAQ;AAC/B,8CAA8C;AAC9C;AACA;AACA;;AAEA,8BAA8B,aAAa;;AAE3C;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E,6CAA6C,oCAAoC;AACjF,KAAK,4BAA4B,oCAAoC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;;;;;ACpEA,eAAe,mBAAO,CAAC,sDAAQ;AAC/B;;AAEA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;;;;;ACrBA;AACA,UAAU;AACV;;;;;;;;;;;;ACFA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,kEAAc;AACrC,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,cAAc,mBAAO,CAAC,kEAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,0DAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA,UAAU,mBAAO,CAAC,4DAAW;AAC7B,cAAc,mBAAO,CAAC,4DAAW;AACjC,aAAa,mBAAO,CAAC,4DAAW;AAChC,iDAAiD,mBAAO,CAAC,sEAAgB;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB,EAAE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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AAO,CAAC,gEAAa;AACpC,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;;AAEA,cAAc;AACd;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;ACRH,gBAAgB,mBAAO,CAAC,gEAAa;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA;;AAEA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;ACdH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,KAA4D;AAC7D,CAAC,SACW;AACZ,CAAC,qBAAqB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE,+CAA+C,EAAE;AAClH;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,4DAA4D,0CAA0C;AACtG;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B,EAAE;AACnE;AACA;AACA;AACA,wCAAwC,6DAA6D,EAAE;AACvG,uCAAuC,WAAW,EAAE;AACpD;AACA,kCAAkC,aAAa,EAAE;AACjD,oCAAoC,WAAW,EAAE;AACjD,gCAAgC,aAAa,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B;AAC7B;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,wBAAwB,oCAAoC;AACxL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,sEAAsE;AACtJ;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oDAAoD;AAC5F;AACA;AACA;AACA;AACA;AACA,2BAA2B,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qEAAqE,gBAAgB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,kBAAkB;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,mFAAmF,kBAAkB;AACrG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,oCAAoC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0BAA0B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAsB;AAChE,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0BAA0B,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,6BAA6B,EAAE;AACpF;AACA;AACA;AACA;AACA,8CAA8C,kDAAkD,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sDAAsD;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+BAA+B,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,gBAAgB;AACrF;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,yCAAyC,6BAA6B;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAsB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAA0C;AAC5G;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;;ACjxGD;AAAA;AAAA;AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AAEH,mEAAmE;AACnE,+BAA+B;AAC/B,+BAA+B;AAC/B,iCAAiC;AACjC,kCAAkC;AAClC,oCAAoC;AACpC,+BAA+B;AAC/B,6BAA6B;AAC7B,+BAA+B;AAC/B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,4BAA4B;AAC5B,iCAAiC;AACjC,4BAA4B;AAE5B;;;;IAII;AACJ,8BAA8B;AAE9B,4DAA4D;AAE5D,+EAA+E;AAC/E,oEAAoE;AAEpE,gEAAgE;AAChE,gCAAgC;AAEhC;;;;IAII;AACJ,8EAA8E;AAE9E;;;GAGG;AAEF,sGAAsG;AACtG,iGAAiG;AACjG,sHAAsH;AAEtH;;;EAGE;AACH,4DAA4D;AAE5D;;GAEG;AACwB,CAAE,6BAA6B;AAG1D;;GAEG","file":"polyfills.js","sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport 'core-js/es7/reflect';\n","require('../modules/es7.reflect.define-metadata');\nrequire('../modules/es7.reflect.delete-metadata');\nrequire('../modules/es7.reflect.get-metadata');\nrequire('../modules/es7.reflect.get-metadata-keys');\nrequire('../modules/es7.reflect.get-own-metadata');\nrequire('../modules/es7.reflect.get-own-metadata-keys');\nrequire('../modules/es7.reflect.has-metadata');\nrequire('../modules/es7.reflect.has-own-metadata');\nrequire('../modules/es7.reflect.metadata');\nmodule.exports = require('../modules/_core').Reflect;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\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 var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\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 C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\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","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(factory());\n}(this, (function () { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Zone$1 = (function (global) {\n var performance = global['performance'];\n function mark(name) {\n performance && performance['mark'] && performance['mark'](name);\n }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n var checkDuplicate = global[('__zone_symbol__forceDuplicateZoneCheck')] === true;\n if (global['Zone']) {\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') {\n throw new Error('Zone already loaded.');\n }\n else {\n return global['Zone'];\n }\n }\n var Zone = /** @class */ (function () {\n function Zone(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = zoneSpec && zoneSpec.properties || {};\n this._zoneDelegate =\n new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n Zone.assertZonePatched = function () {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n };\n Object.defineProperty(Zone, \"root\", {\n get: function () {\n var zone = Zone.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"current\", {\n get: function () {\n return _currentZoneFrame.zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"currentTask\", {\n get: function () {\n return _currentTask;\n },\n enumerable: true,\n configurable: true\n });\n Zone.__load_patch = function (name, fn) {\n if (patches.hasOwnProperty(name)) {\n if (checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n var perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, Zone, _api);\n performanceMeasure(perfName, perfName);\n }\n };\n Object.defineProperty(Zone.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Zone.prototype.get = function (key) {\n var zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n };\n Zone.prototype.getZoneWith = function (key) {\n var current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n };\n Zone.prototype.fork = function (zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n };\n Zone.prototype.wrap = function (callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n var _callback = this._zoneDelegate.intercept(this, callback, source);\n var zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n };\n Zone.prototype.run = function (callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = null; }\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runTask = function (task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n }\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) {\n return;\n }\n var reEntryGuard = task.state != running;\n reEntryGuard && task._transitionTo(running, scheduled);\n task.runCount++;\n var previousTask = _currentTask;\n _currentTask = task;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (task.type == macroTask && task.data && !task.data.isPeriodic) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n if (task.state !== notScheduled && task.state !== unknown) {\n if (task.type == eventTask || (task.data && task.data.isPeriodic)) {\n reEntryGuard && task._transitionTo(scheduled, running);\n }\n else {\n task.runCount = 0;\n this._updateTaskCount(task, -1);\n reEntryGuard &&\n task._transitionTo(notScheduled, running, notScheduled);\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n };\n Zone.prototype.scheduleTask = function (task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n var newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(\"can not reschedule task to \" + this.name + \" which is descendants of the original zone \" + task.zone.name);\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n var zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n };\n Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n };\n Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.cancelTask = function (task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = 0;\n return task;\n };\n Zone.prototype._updateTaskCount = function (task, count) {\n var zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (var i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n };\n Zone.__symbol__ = __symbol__;\n return Zone;\n }());\n var DELEGATE_ZS = {\n name: '',\n onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); },\n onScheduleTask: function (delegate, _, target, task) {\n return delegate.scheduleTask(target, task);\n },\n onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n },\n onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); }\n };\n var ZoneDelegate = /** @class */ (function () {\n function ZoneDelegate(zone, parentDelegate, zoneSpec) {\n this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 };\n this.zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate.zone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate.zone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate.zone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate.zone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt = zoneSpec &&\n (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate.zone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate.zone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate.zone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this.zone;\n }\n }\n }\n ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :\n new Zone(targetZone, zoneSpec);\n };\n ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n return this._interceptZS ?\n this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :\n callback;\n };\n ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :\n callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.handleError = function (targetZone, error) {\n return this._handleErrorZS ?\n this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :\n true;\n };\n ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n var returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n };\n ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :\n task.callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n var value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n };\n ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n };\n ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n var counts = this._taskCounts;\n var prev = counts[type];\n var next = counts[type] = prev + count;\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n var isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type\n };\n this.hasTask(this.zone, isEmpty);\n }\n };\n return ZoneDelegate;\n }());\n var ZoneTask = /** @class */ (function () {\n function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {\n this._zone = null;\n this.runCount = 0;\n this._zoneDelegates = null;\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n this.callback = callback;\n var self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n ZoneTask.invokeTask = function (task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n };\n Object.defineProperty(ZoneTask.prototype, \"zone\", {\n get: function () {\n return this._zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZoneTask.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: true,\n configurable: true\n });\n ZoneTask.prototype.cancelScheduleRequest = function () {\n this._transitionTo(notScheduled, scheduling);\n };\n ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(this.type + \" '\" + this.source + \"': can not transition to '\" + toState + \"', expecting state '\" + fromState1 + \"'\" + (fromState2 ? ' or \\'' + fromState2 + '\\'' : '') + \", was '\" + this._state + \"'.\");\n }\n };\n ZoneTask.prototype.toString = function () {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n };\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n ZoneTask.prototype.toJSON = function () {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount\n };\n };\n return ZoneTask;\n }());\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var symbolSetTimeout = __symbol__('setTimeout');\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var _microTaskQueue = [];\n var _isDrainingMicrotaskQueue = false;\n var nativeMicroTaskQueuePromise;\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n var nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue);\n }\n else {\n global[symbolSetTimeout](drainMicroTaskQueue, 0);\n }\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n var queue = _microTaskQueue;\n _microTaskQueue = [];\n for (var i = 0; i < queue.length; i++) {\n var task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var NO_ZONE = { name: 'NO ZONE' };\n var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n var patches = {};\n var _api = {\n symbol: __symbol__,\n currentZoneFrame: function () { return _currentZoneFrame; },\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; },\n patchEventTarget: function () { return []; },\n patchOnProperties: noop,\n patchMethod: function () { return noop; },\n bindArguments: function () { return []; },\n patchThen: function () { return noop; },\n setNativePromise: function (NativePromise) {\n // sometimes NativePromise.resolve static function\n // is not ready yet, (such as core-js/es6.promise)\n // so we need to check here.\n if (NativePromise && typeof NativePromise.resolve === 'function') {\n nativeMicroTaskQueuePromise = NativePromise.resolve(0);\n }\n },\n };\n var _currentZoneFrame = { parent: null, zone: new Zone(null, null) };\n var _currentTask = null;\n var _numberOfNestedTaskFrames = 0;\n function noop() { }\n function __symbol__(name) {\n return '__zone_symbol__' + name;\n }\n performanceMeasure('Zone', 'Zone');\n return global['Zone'] = Zone;\n})(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global);\n\nvar __values = (undefined && undefined.__values) || function (o) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n if (m) return m.call(o);\n return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n};\nZone.__load_patch('ZoneAwarePromise', function (global, Zone, api) {\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n var className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n var __symbol__ = api.symbol;\n var _uncaughtPromiseErrors = [];\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var creationTrace = '__creationTrace__';\n api.onUnhandledError = function (e) {\n if (api.showUncaughtError()) {\n var rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = function () {\n while (_uncaughtPromiseErrors.length) {\n var _loop_1 = function () {\n var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(function () {\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n };\n while (_uncaughtPromiseErrors.length) {\n _loop_1();\n }\n }\n };\n var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (handler && typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) {\n }\n }\n function isThenable(value) {\n return value && value.then;\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n var symbolState = __symbol__('state');\n var symbolValue = __symbol__('value');\n var symbolFinally = __symbol__('finally');\n var symbolParentPromiseValue = __symbol__('parentPromiseValue');\n var symbolParentPromiseState = __symbol__('parentPromiseState');\n var source = 'Promise.then';\n var UNRESOLVED = null;\n var RESOLVED = true;\n var REJECTED = false;\n var REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return function (v) {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n var once = function () {\n var wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n var TYPE_ERROR = 'Promise resolved with itself';\n var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n var onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n var then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED && value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n var queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n var trace = Zone.currentTask && Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace });\n }\n }\n for (var i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n try {\n // try to print more readable error log\n throw new Error('Uncaught (in promise): ' + readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n var error_1 = err;\n error_1.rejection = value;\n error_1.promise = promise;\n error_1.zone = Zone.current;\n error_1.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(error_1);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n var handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) {\n }\n promise[symbolState] = REJECTED;\n for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n var promiseState = promise[symbolState];\n var delegate = promiseState ?\n (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :\n (typeof onRejected === 'function') ? onRejected : forwardRejection;\n zone.scheduleMicroTask(source, function () {\n try {\n var parentPromiseValue = promise[symbolValue];\n var isFinallyPromise = chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ?\n [] :\n [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n var ZoneAwarePromise = /** @class */ (function () {\n function ZoneAwarePromise(executor) {\n var promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n ZoneAwarePromise.toString = function () {\n return ZONE_AWARE_PROMISE_TO_STRING;\n };\n ZoneAwarePromise.resolve = function (value) {\n return resolvePromise(new this(null), RESOLVED, value);\n };\n ZoneAwarePromise.reject = function (error) {\n return resolvePromise(new this(null), REJECTED, error);\n };\n ZoneAwarePromise.race = function (values) {\n var e_1, _a;\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) {\n promise && (promise = null || resolve(value));\n }\n function onReject(error) {\n promise && (promise = null || reject(error));\n }\n try {\n for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n var value = values_1_1.value;\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return promise;\n };\n ZoneAwarePromise.all = function (values) {\n var e_2, _a;\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n var unresolvedCount = 2;\n var valueIndex = 0;\n var resolvedValues = [];\n var _loop_2 = function (value) {\n if (!isThenable(value)) {\n value = this_1.resolve(value);\n }\n var curValueIndex = valueIndex;\n value.then(function (value) {\n resolvedValues[curValueIndex] = value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, reject);\n unresolvedCount++;\n valueIndex++;\n };\n var this_1 = this;\n try {\n for (var values_2 = __values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {\n var value = values_2_1.value;\n _loop_2(value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n };\n ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n var chainPromise = new this.constructor(null);\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n };\n ZoneAwarePromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n ZoneAwarePromise.prototype.finally = function (onFinally) {\n var chainPromise = new this.constructor(null);\n chainPromise[symbolFinally] = symbolFinally;\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n };\n return ZoneAwarePromise;\n }());\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n var NativePromise = global[symbolPromise] = global['Promise'];\n var ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise');\n var desc = ObjectGetOwnPropertyDescriptor(global, 'Promise');\n if (!desc || desc.configurable) {\n desc && delete desc.writable;\n desc && delete desc.value;\n if (!desc) {\n desc = { configurable: true, enumerable: true };\n }\n desc.get = function () {\n // if we already set ZoneAwarePromise, use patched one\n // otherwise return native one.\n return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise];\n };\n desc.set = function (NewNativePromise) {\n if (NewNativePromise === ZoneAwarePromise) {\n // if the NewNativePromise is ZoneAwarePromise\n // save to global\n global[ZONE_AWARE_PROMISE] = NewNativePromise;\n }\n else {\n // if the NewNativePromise is not ZoneAwarePromise\n // for example: after load zone.js, some library just\n // set es6-promise to global, if we set it to global\n // directly, assertZonePatched will fail and angular\n // will not loaded, so we just set the NewNativePromise\n // to global[symbolPromise], so the result is just like\n // we load ES6 Promise before zone.js\n global[symbolPromise] = NewNativePromise;\n if (!NewNativePromise.prototype[symbolThen]) {\n patchThen(NewNativePromise);\n }\n api.setNativePromise(NewNativePromise);\n }\n };\n ObjectDefineProperty(global, 'Promise', desc);\n }\n global['Promise'] = ZoneAwarePromise;\n var symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n var proto = Ctor.prototype;\n var prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n var originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n var _this = this;\n var wrapped = new ZoneAwarePromise(function (resolve, reject) {\n originalThen.call(_this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n if (NativePromise) {\n patchThen(NativePromise);\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nZone.__load_patch('fetch', function (global, Zone, api) {\n var fetch = global['fetch'];\n var ZoneAwarePromise = global.Promise;\n var symbolThenPatched = api.symbol('thenPatched');\n var fetchTaskScheduling = api.symbol('fetchTaskScheduling');\n var fetchTaskAborting = api.symbol('fetchTaskAborting');\n if (typeof fetch !== 'function') {\n return;\n }\n var OriginalAbortController = global['AbortController'];\n var supportAbort = typeof OriginalAbortController === 'function';\n var abortNative = null;\n if (supportAbort) {\n global['AbortController'] = function () {\n var abortController = new OriginalAbortController();\n var signal = abortController.signal;\n signal.abortController = abortController;\n return abortController;\n };\n abortNative = api.patchMethod(OriginalAbortController.prototype, 'abort', function (delegate) { return function (self, args) {\n if (self.task) {\n return self.task.zone.cancelTask(self.task);\n }\n return delegate.apply(self, args);\n }; });\n }\n var placeholder = function () { };\n global['fetch'] = function () {\n var _this = this;\n var args = Array.prototype.slice.call(arguments);\n var options = args.length > 1 ? args[1] : null;\n var signal = options && options.signal;\n return new Promise(function (res, rej) {\n var task = Zone.current.scheduleMacroTask('fetch', placeholder, args, function () {\n var fetchPromise;\n var zone = Zone.current;\n try {\n zone[fetchTaskScheduling] = true;\n fetchPromise = fetch.apply(_this, args);\n }\n catch (error) {\n rej(error);\n return;\n }\n finally {\n zone[fetchTaskScheduling] = false;\n }\n if (!(fetchPromise instanceof ZoneAwarePromise)) {\n var ctor = fetchPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n api.patchThen(ctor);\n }\n }\n fetchPromise.then(function (resource) {\n if (task.state !== 'notScheduled') {\n task.invoke();\n }\n res(resource);\n }, function (error) {\n if (task.state !== 'notScheduled') {\n task.invoke();\n }\n rej(error);\n });\n }, function () {\n if (!supportAbort) {\n rej('No AbortController supported, can not cancel fetch');\n return;\n }\n if (signal && signal.abortController && !signal.aborted &&\n typeof signal.abortController.abort === 'function' && abortNative) {\n try {\n Zone.current[fetchTaskAborting] = true;\n abortNative.call(signal.abortController);\n }\n finally {\n Zone.current[fetchTaskAborting] = false;\n }\n }\n else {\n rej('cancel fetch need a AbortController.signal');\n }\n });\n if (signal && signal.abortController) {\n signal.abortController.task = task;\n }\n });\n };\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n// issue #989, to reduce bundle size, use short name\n/** Object.getOwnPropertyDescriptor */\nvar ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n/** Object.defineProperty */\nvar ObjectDefineProperty = Object.defineProperty;\n/** Object.getPrototypeOf */\nvar ObjectGetPrototypeOf = Object.getPrototypeOf;\n/** Object.create */\nvar ObjectCreate = Object.create;\n/** Array.prototype.slice */\nvar ArraySlice = Array.prototype.slice;\n/** addEventListener string const */\nvar ADD_EVENT_LISTENER_STR = 'addEventListener';\n/** removeEventListener string const */\nvar REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n/** zoneSymbol addEventListener */\nvar ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR);\n/** zoneSymbol removeEventListener */\nvar ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR);\n/** true string const */\nvar TRUE_STR = 'true';\n/** false string const */\nvar FALSE_STR = 'false';\n/** __zone_symbol__ string const */\nvar ZONE_SYMBOL_PREFIX = '__zone_symbol__';\nfunction wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n}\nfunction scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n}\nvar zoneSymbol = Zone.__symbol__;\nvar isWindowExists = typeof window !== 'undefined';\nvar internalWindow = isWindowExists ? window : undefined;\nvar _global = isWindowExists && internalWindow || typeof self === 'object' && self || global;\nvar REMOVE_ATTRIBUTE = 'removeAttribute';\nvar NULL_ON_PROP_VALUE = [null];\nfunction bindArguments(args, source) {\n for (var i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n}\nfunction patchPrototype(prototype, fnNames) {\n var source = prototype.constructor['name'];\n var _loop_1 = function (i) {\n var name_1 = fnNames[i];\n var delegate = prototype[name_1];\n if (delegate) {\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1);\n if (!isPropertyWritable(prototypeDesc)) {\n return \"continue\";\n }\n prototype[name_1] = (function (delegate) {\n var patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n };\n for (var i = 0; i < fnNames.length; i++) {\n _loop_1(i);\n }\n}\nfunction isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n}\nvar isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nvar isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]');\nvar isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n// we are in electron of nw, so we are both browser and nodejs\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nvar isMix = typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]' && !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\nvar zoneSymbolEventNames = {};\nvar wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n var eventNameSymbol = zoneSymbolEventNames[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n var target = this || event.target || _global;\n var listener = target[eventNameSymbol];\n var result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signiture\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n var errorEvent = event;\n result = listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n};\nfunction patchProperty(obj, prop, prototype) {\n var desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n var originalDescGet = desc.get;\n var originalDescSet = desc.set;\n // substr(2) cuz 'onclick' -> 'click', etc\n var eventName = prop.substr(2);\n var eventNameSymbol = zoneSymbolEventNames[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n var previousValue = target[eventNameSymbol];\n if (previousValue) {\n target.removeEventListener(eventName, wrapFn);\n }\n // issue #978, when onload handler was added before loading zone.js\n // we should remove it with originalDescSet\n if (originalDescSet) {\n originalDescSet.apply(target, NULL_ON_PROP_VALUE);\n }\n if (typeof newValue === 'function') {\n target[eventNameSymbol] = newValue;\n target.addEventListener(eventName, wrapFn, false);\n }\n else {\n target[eventNameSymbol] = null;\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n var listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n var value = originalDescGet && originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n}\nfunction patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n var onProperties = [];\n for (var prop in obj) {\n if (prop.substr(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (var j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n}\nvar originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n var OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n var a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n var instance = new OriginalClass(function () { });\n var prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n }\n });\n }\n }(prop));\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n}\nfunction copySymbolProperties(src, dest) {\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return;\n }\n var symbols = Object.getOwnPropertySymbols(src);\n symbols.forEach(function (symbol) {\n var desc = Object.getOwnPropertyDescriptor(src, symbol);\n Object.defineProperty(dest, symbol, {\n get: function () {\n return src[symbol];\n },\n set: function (value) {\n if (desc && (!desc.writable || typeof desc.set !== 'function')) {\n // if src[symbol] is not writable or not have a setter, just return\n return;\n }\n src[symbol] = value;\n },\n enumerable: desc ? desc.enumerable : true,\n configurable: desc ? desc.configurable : true\n });\n });\n}\nvar shouldCopySymbolProperties = false;\n\nfunction patchMethod(target, name, patchFn) {\n var proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n var delegateName = zoneSymbol(name);\n var delegate = null;\n if (proto && !(delegate = proto[delegateName])) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n var patchDelegate_1 = patchFn(delegate, delegateName, name);\n proto[name] = function () {\n return patchDelegate_1(this, arguments);\n };\n attachOriginToPatched(proto[name], delegate);\n if (shouldCopySymbolProperties) {\n copySymbolProperties(delegate, proto[name]);\n }\n }\n }\n return delegate;\n}\n// TODO: @JiaLiPassion, support cancel task later if necessary\nfunction patchMacroTask(obj, funcName, metaCreator) {\n var setNative = null;\n function scheduleTask(task) {\n var data = task.data;\n data.args[data.cbIdx] = function () {\n task.invoke.apply(this, arguments);\n };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) {\n var meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n }; });\n}\n\nfunction attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n}\nvar isDetectedIEOrEdge = false;\nvar ieOrEdge = false;\nfunction isIE() {\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {\n return true;\n }\n }\n catch (error) {\n }\n return false;\n}\nfunction isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n return ieOrEdge;\n }\n catch (error) {\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// override Function.prototype.toString to make zone.js patched function\n// look like native function\nZone.__load_patch('toString', function (global) {\n // patch Func.prototype.toString to let them look like native\n var originalFunctionToString = Function.prototype.toString;\n var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n var PROMISE_SYMBOL = zoneSymbol('Promise');\n var ERROR_SYMBOL = zoneSymbol('Error');\n var newFunctionToString = function toString() {\n if (typeof this === 'function') {\n var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.apply(this[ORIGINAL_DELEGATE_SYMBOL], arguments);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n var nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.apply(nativePromise, arguments);\n }\n }\n if (this === Error) {\n var nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.apply(nativeError, arguments);\n }\n }\n }\n return originalFunctionToString.apply(this, arguments);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n var originalObjectToString = Object.prototype.toString;\n var PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.apply(this, arguments);\n };\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nvar passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n }\n });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\n// an identifier to tell ZoneTask do not create a new invoke closure\nvar OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true\n};\nvar zoneSymbolEventNames$1 = {};\nvar globalSources = {};\nvar EVENT_NAME_SYMBOL_REGX = /^__zone_symbol__(\\w+)(true|false)$/;\nvar IMMEDIATE_PROPAGATION_SYMBOL = ('__zone_symbol__propagationStopped');\nfunction patchEventTarget(_global, apis, patchOptions) {\n var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n var PREPEND_EVENT_LISTENER = 'prependListener';\n var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n var invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n var delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = function (event) { return delegate.handleEvent(event); };\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n task.invoke(task, target, [event]);\n var options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options);\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = false\n var globalZoneAwareCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n var globalZoneAwareCaptureCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n var useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n var validateHandler = patchOptions && patchOptions.vh;\n var checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n var returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n var proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n var eventNameToString = patchOptions && patchOptions.eventNameToString;\n // a shared global taskData to pass data for scheduleEventTask\n // so we do not need to create a new object just for pass some data\n var taskData = {};\n var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER];\n var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER];\n var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER];\n var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER];\n var nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n function checkIsPassive(task) {\n if (!passiveSupported && typeof taskData.options !== 'boolean' &&\n typeof taskData.options !== 'undefined' && taskData.options !== null) {\n // options is a non-null non-undefined object\n // passive is not supported\n // don't pass options as object\n // just pass capture as a boolean\n task.options = !!taskData.options.capture;\n taskData.options = task.options;\n }\n }\n var customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n checkIsPassive(task);\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n var customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n var symbolEventNames = zoneSymbolEventNames$1[task.eventName];\n var symbolEventName = void 0;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n var customScheduleNonGlobal = function (task) {\n checkIsPassive(task);\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n var compareTaskCallbackVsDelegate = function (task, delegate) {\n var typeOfDelegate = typeof delegate;\n return (typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate);\n };\n var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate;\n var blackListedEvents = Zone[Zone.__symbol__('BLACK_LISTED_EVENTS')];\n var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) {\n if (returnTarget === void 0) { returnTarget = false; }\n if (prepend === void 0) { prepend = false; }\n return function () {\n var target = this || _global;\n var eventName = arguments[0];\n var delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // don't create the bind delegate function for handleEvent\n // case here to improve addEventListener performance\n // we will create the bind delegate when invoke\n var isHandleEvent = false;\n if (typeof delegate !== 'function') {\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isHandleEvent = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n var options = arguments[2];\n if (blackListedEvents) {\n // check black list\n for (var i = 0; i < blackListedEvents.length; i++) {\n if (eventName === blackListedEvents[i]) {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n var capture;\n var once = false;\n if (options === undefined) {\n capture = false;\n }\n else if (options === true) {\n capture = true;\n }\n else if (options === false) {\n capture = false;\n }\n else {\n capture = options ? !!options.capture : false;\n once = options ? !!options.once : false;\n }\n var zone = Zone.current;\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n var symbolEventName;\n if (!symbolEventNames) {\n // the code is duplicate, but I just want to get some better performance\n var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames$1[eventName] = {};\n zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;\n symbolEventName = capture ? symbolCapture : symbol;\n }\n else {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = target[symbolEventName];\n var isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (var i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n var source;\n var constructorName = target.constructor['name'];\n var targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source = constructorName + addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // do not create a new object as task.data to pass those things\n // just use the global shared one\n taskData.options = options;\n if (once) {\n // if addEventListener with once options, we don't pass it to\n // native addEventListener, instead we keep the once setting\n // and handle ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n options.once = true;\n }\n if (!(!passiveSupported && typeof task.options === 'boolean')) {\n // if not support passive, and we pass an option object\n // to addEventListener, we should save the options to task\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isHandleEvent) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n var options = arguments[2];\n var capture;\n if (options === undefined) {\n capture = false;\n }\n else if (options === true) {\n capture = true;\n }\n else if (options === false) {\n capture = false;\n }\n else {\n capture = options ? !!options.capture : false;\n }\n var delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n var symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n }\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // issue 930, didn't find the event name or callback\n // from zone kept existingTasks, the callback maybe\n // added outside of zone, we need to call native removeEventListener\n // to try to remove it.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n var listeners = [];\n var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (!eventName) {\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n var prop = keys[i];\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n if (symbolEventNames) {\n var symbolEventName = symbolEventNames[FALSE_STR];\n var symbolCaptureEventName = symbolEventNames[TRUE_STR];\n var tasks = target[symbolEventName];\n var captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n var removeTasks = tasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n var removeTasks = captureTasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n var results = [];\n for (var i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n}\nfunction findEventTasks(target, eventName) {\n var foundTasks = [];\n for (var prop in target) {\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n var tasks = target[prop];\n if (tasks) {\n for (var i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n}\nfunction patchEventPrototype(global, api) {\n var Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n }; });\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nvar taskSymbol = zoneSymbol('zoneTask');\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n var setNative = null;\n var clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n var tasksByHandleId = {};\n function scheduleTask(task) {\n var data = task.data;\n function timer() {\n try {\n task.invoke.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n if (!(task.data && task.data.isPeriodic)) {\n if (typeof data.handleId === 'number') {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[data.handleId];\n }\n else if (data.handleId) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n data.handleId[taskSymbol] = null;\n }\n }\n }\n }\n data.args[0] = timer;\n data.handleId = setNative.apply(window, data.args);\n return task;\n }\n function clearTask(task) {\n return clearNative(task.data.handleId);\n }\n setNative =\n patchMethod(window, setName, function (delegate) { return function (self, args) {\n if (typeof args[0] === 'function') {\n var options = {\n isPeriodic: nameSuffix === 'Interval',\n delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 :\n undefined,\n args: args\n };\n var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n var handle = task.data.handleId;\n if (typeof handle === 'number') {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handle] = task;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task;\n }\n // check whether handle is null, because some polyfill or browser\n // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame\n if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&\n typeof handle.unref === 'function') {\n task.ref = handle.ref.bind(handle);\n task.unref = handle.unref.bind(handle);\n }\n if (typeof handle === 'number' || handle) {\n return handle;\n }\n return task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n }; });\n clearNative =\n patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n var id = args[0];\n var task;\n if (typeof id === 'number') {\n // non nodejs env.\n task = tasksByHandleId[id];\n }\n else {\n // nodejs env.\n task = id && id[taskSymbol];\n // other environments.\n if (!task) {\n task = id;\n }\n }\n if (task && typeof task.type === 'string') {\n if (task.state !== 'notScheduled' &&\n (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {\n if (typeof id === 'number') {\n delete tasksByHandleId[id];\n }\n else if (id) {\n id[taskSymbol] = null;\n }\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n }; });\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/*\n * This is necessary for Chrome and Chrome mobile, to enable\n * things like redefining `createdCallback` on an element.\n */\nvar _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;\nvar _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] =\n Object.getOwnPropertyDescriptor;\nvar _create = Object.create;\nvar unconfigurablesKey = zoneSymbol('unconfigurables');\nfunction propertyPatch() {\n Object.defineProperty = function (obj, prop, desc) {\n if (isUnconfigurable(obj, prop)) {\n throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n }\n var originalConfigurableFlag = desc.configurable;\n if (prop !== 'prototype') {\n desc = rewriteDescriptor(obj, prop, desc);\n }\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n };\n Object.defineProperties = function (obj, props) {\n Object.keys(props).forEach(function (prop) {\n Object.defineProperty(obj, prop, props[prop]);\n });\n return obj;\n };\n Object.create = function (obj, proto) {\n if (typeof proto === 'object' && !Object.isFrozen(proto)) {\n Object.keys(proto).forEach(function (prop) {\n proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n });\n }\n return _create(obj, proto);\n };\n Object.getOwnPropertyDescriptor = function (obj, prop) {\n var desc = _getOwnPropertyDescriptor(obj, prop);\n if (desc && isUnconfigurable(obj, prop)) {\n desc.configurable = false;\n }\n return desc;\n };\n}\nfunction _redefineProperty(obj, prop, desc) {\n var originalConfigurableFlag = desc.configurable;\n desc = rewriteDescriptor(obj, prop, desc);\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n}\nfunction isUnconfigurable(obj, prop) {\n return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n}\nfunction rewriteDescriptor(obj, prop, desc) {\n // issue-927, if the desc is frozen, don't try to change the desc\n if (!Object.isFrozen(desc)) {\n desc.configurable = true;\n }\n if (!desc.configurable) {\n // issue-927, if the obj is frozen, don't try to set the desc to obj\n if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {\n _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n }\n if (obj[unconfigurablesKey]) {\n obj[unconfigurablesKey][prop] = true;\n }\n }\n return desc;\n}\nfunction _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n if (desc.configurable) {\n // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's\n // retry with the original flag value\n if (typeof originalConfigurableFlag == 'undefined') {\n delete desc.configurable;\n }\n else {\n desc.configurable = originalConfigurableFlag;\n }\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n var descJson = null;\n try {\n descJson = JSON.stringify(desc);\n }\n catch (error) {\n descJson = desc.toString();\n }\n console.log(\"Attempting to configure '\" + prop + \"' with descriptor '\" + descJson + \"' on object '\" + obj + \"' and got error, giving up: \" + error);\n }\n }\n else {\n throw error;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// we have to patch the instance since the proto is non-configurable\nfunction apply(api, _global) {\n var WS = _global.WebSocket;\n // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener\n // On older Chrome, no need since EventTarget was already patched\n if (!_global.EventTarget) {\n patchEventTarget(_global, [WS.prototype]);\n }\n _global.WebSocket = function (x, y) {\n var socket = arguments.length > 1 ? new WS(x, y) : new WS(x);\n var proxySocket;\n var proxySocketProto;\n // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n var onmessageDesc = ObjectGetOwnPropertyDescriptor(socket, 'onmessage');\n if (onmessageDesc && onmessageDesc.configurable === false) {\n proxySocket = ObjectCreate(socket);\n // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'\n // but proxySocket not, so we will keep socket as prototype and pass it to\n // patchOnProperties method\n proxySocketProto = socket;\n [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {\n proxySocket[propName] = function () {\n var args = ArraySlice.call(arguments);\n if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {\n var eventName = args.length > 0 ? args[0] : undefined;\n if (eventName) {\n var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);\n socket[propertySymbol] = proxySocket[propertySymbol];\n }\n }\n return socket[propName].apply(socket, args);\n };\n });\n }\n else {\n // we can patch the real socket\n proxySocket = socket;\n }\n patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);\n return proxySocket;\n };\n var globalWebSocket = _global['WebSocket'];\n for (var prop in WS) {\n globalWebSocket[prop] = WS[prop];\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {globalThis}\n */\nvar globalEventHandlersEventNames = [\n 'abort',\n 'animationcancel',\n 'animationend',\n 'animationiteration',\n 'auxclick',\n 'beforeinput',\n 'blur',\n 'cancel',\n 'canplay',\n 'canplaythrough',\n 'change',\n 'compositionstart',\n 'compositionupdate',\n 'compositionend',\n 'cuechange',\n 'click',\n 'close',\n 'contextmenu',\n 'curechange',\n 'dblclick',\n 'drag',\n 'dragend',\n 'dragenter',\n 'dragexit',\n 'dragleave',\n 'dragover',\n 'drop',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'focus',\n 'focusin',\n 'focusout',\n 'gotpointercapture',\n 'input',\n 'invalid',\n 'keydown',\n 'keypress',\n 'keyup',\n 'load',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'lostpointercapture',\n 'mousedown',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'mouseup',\n 'mousewheel',\n 'orientationchange',\n 'pause',\n 'play',\n 'playing',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerlockchange',\n 'mozpointerlockchange',\n 'webkitpointerlockerchange',\n 'pointerlockerror',\n 'mozpointerlockerror',\n 'webkitpointerlockerror',\n 'pointermove',\n 'pointout',\n 'pointerover',\n 'pointerup',\n 'progress',\n 'ratechange',\n 'reset',\n 'resize',\n 'scroll',\n 'seeked',\n 'seeking',\n 'select',\n 'selectionchange',\n 'selectstart',\n 'show',\n 'sort',\n 'stalled',\n 'submit',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'touchcancel',\n 'touchmove',\n 'touchstart',\n 'touchend',\n 'transitioncancel',\n 'transitionend',\n 'waiting',\n 'wheel'\n];\nvar documentEventNames = [\n 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange',\n 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror',\n 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange',\n 'visibilitychange', 'resume'\n];\nvar windowEventNames = [\n 'absolutedeviceorientation',\n 'afterinput',\n 'afterprint',\n 'appinstalled',\n 'beforeinstallprompt',\n 'beforeprint',\n 'beforeunload',\n 'devicelight',\n 'devicemotion',\n 'deviceorientation',\n 'deviceorientationabsolute',\n 'deviceproximity',\n 'hashchange',\n 'languagechange',\n 'message',\n 'mozbeforepaint',\n 'offline',\n 'online',\n 'paint',\n 'pageshow',\n 'pagehide',\n 'popstate',\n 'rejectionhandled',\n 'storage',\n 'unhandledrejection',\n 'unload',\n 'userproximity',\n 'vrdisplyconnected',\n 'vrdisplaydisconnected',\n 'vrdisplaypresentchange'\n];\nvar htmlElementEventNames = [\n 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend',\n 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend',\n 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend'\n];\nvar mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend'];\nvar ieElementEventNames = [\n 'activate',\n 'afterupdate',\n 'ariarequest',\n 'beforeactivate',\n 'beforedeactivate',\n 'beforeeditfocus',\n 'beforeupdate',\n 'cellchange',\n 'controlselect',\n 'dataavailable',\n 'datasetchanged',\n 'datasetcomplete',\n 'errorupdate',\n 'filterchange',\n 'layoutcomplete',\n 'losecapture',\n 'move',\n 'moveend',\n 'movestart',\n 'propertychange',\n 'resizeend',\n 'resizestart',\n 'rowenter',\n 'rowexit',\n 'rowsdelete',\n 'rowsinserted',\n 'command',\n 'compassneedscalibration',\n 'deactivate',\n 'help',\n 'mscontentzoom',\n 'msmanipulationstatechanged',\n 'msgesturechange',\n 'msgesturedoubletap',\n 'msgestureend',\n 'msgesturehold',\n 'msgesturestart',\n 'msgesturetap',\n 'msgotpointercapture',\n 'msinertiastart',\n 'mslostpointercapture',\n 'mspointercancel',\n 'mspointerdown',\n 'mspointerenter',\n 'mspointerhover',\n 'mspointerleave',\n 'mspointermove',\n 'mspointerout',\n 'mspointerover',\n 'mspointerup',\n 'pointerout',\n 'mssitemodejumplistitemremoved',\n 'msthumbnailclick',\n 'stop',\n 'storagecommit'\n];\nvar webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];\nvar formEventNames = ['autocomplete', 'autocompleteerror'];\nvar detailEventNames = ['toggle'];\nvar frameEventNames = ['load'];\nvar frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror'];\nvar marqueeEventNames = ['bounce', 'finish', 'start'];\nvar XMLHttpRequestEventNames = [\n 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend',\n 'readystatechange'\n];\nvar IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close'];\nvar websocketEventNames = ['close', 'error', 'open', 'message'];\nvar workerEventNames = ['error', 'message'];\nvar eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames);\nfunction filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n var tip = ignoreProperties.filter(function (ip) { return ip.target === target; });\n if (!tip || tip.length === 0) {\n return onProperties;\n }\n var targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; });\n}\nfunction patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n var filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n}\nfunction propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n var supportsWebSocket = typeof WebSocket !== 'undefined';\n if (canPatchViaPropertyDescriptor()) {\n var ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n if (isBrowser) {\n var internalWindow = window;\n var ignoreErrorProperties = isIE ? [{ target: internalWindow, ignoreProperties: ['error'] }] : [];\n // in IE/Edge, onProp not exist in window object, but in WindowPrototype\n // so we need to pass WindowPrototype to check onProp exist or not\n patchFilteredProperties(internalWindow, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow));\n patchFilteredProperties(Document.prototype, eventNames, ignoreProperties);\n if (typeof internalWindow['SVGElement'] !== 'undefined') {\n patchFilteredProperties(internalWindow['SVGElement'].prototype, eventNames, ignoreProperties);\n }\n patchFilteredProperties(Element.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties);\n patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties);\n patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties);\n var HTMLMarqueeElement_1 = internalWindow['HTMLMarqueeElement'];\n if (HTMLMarqueeElement_1) {\n patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties);\n }\n var Worker_1 = internalWindow['Worker'];\n if (Worker_1) {\n patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties);\n }\n }\n patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties);\n var XMLHttpRequestEventTarget_1 = _global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n patchFilteredProperties(XMLHttpRequestEventTarget_1 && XMLHttpRequestEventTarget_1.prototype, XMLHttpRequestEventNames, ignoreProperties);\n }\n if (typeof IDBIndex !== 'undefined') {\n patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties);\n }\n if (supportsWebSocket) {\n patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties);\n }\n }\n else {\n // Safari, Android browsers (Jelly Bean)\n patchViaCapturingAllTheEvents();\n patchClass('XMLHttpRequest');\n if (supportsWebSocket) {\n apply(api, _global);\n }\n }\n}\nfunction canPatchViaPropertyDescriptor() {\n if ((isBrowser || isMix) && !ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&\n typeof Element !== 'undefined') {\n // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n // IDL interface attributes are not configurable\n var desc = ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');\n if (desc && !desc.configurable)\n return false;\n }\n var ON_READY_STATE_CHANGE = 'onreadystatechange';\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n var xhrDesc = ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);\n // add enumerable and configurable here because in opera\n // by default XMLHttpRequest.prototype.onreadystatechange is undefined\n // without adding enumerable and configurable will cause onreadystatechange\n // non-configurable\n // and if XMLHttpRequest.prototype.onreadystatechange is undefined,\n // we should set a real desc instead a fake one\n if (xhrDesc) {\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {\n enumerable: true,\n configurable: true,\n get: function () {\n return true;\n }\n });\n var req = new XMLHttpRequest();\n var result = !!req.onreadystatechange;\n // restore original desc\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});\n return result;\n }\n else {\n var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = zoneSymbol('fake');\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {\n enumerable: true,\n configurable: true,\n get: function () {\n return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1];\n },\n set: function (value) {\n this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value;\n }\n });\n var req = new XMLHttpRequest();\n var detectFunc = function () { };\n req.onreadystatechange = detectFunc;\n var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;\n req.onreadystatechange = null;\n return result;\n }\n}\nvar unboundKey = zoneSymbol('unbound');\n// Whenever any eventListener fires, we check the eventListener target and all parents\n// for `onwhatever` properties and replace them with zone-bound functions\n// - Chrome (for now)\nfunction patchViaCapturingAllTheEvents() {\n var _loop_1 = function (i) {\n var property = eventNames[i];\n var onproperty = 'on' + property;\n self.addEventListener(property, function (event) {\n var elt = event.target, bound, source;\n if (elt) {\n source = elt.constructor['name'] + '.' + onproperty;\n }\n else {\n source = 'unknown.' + onproperty;\n }\n while (elt) {\n if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n bound = wrapWithCurrentZone(elt[onproperty], source);\n bound[unboundKey] = elt[onproperty];\n elt[onproperty] = bound;\n }\n elt = elt.parentElement;\n }\n }, true);\n };\n for (var i = 0; i < eventNames.length; i++) {\n _loop_1(i);\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction eventTargetPatch(_global, api) {\n var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';\n var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket'\n .split(',');\n var EVENT_TARGET = 'EventTarget';\n var apis = [];\n var isWtf = _global['wtf'];\n var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');\n if (isWtf) {\n // Workaround for: https://github.com/google/tracing-framework/issues/555\n apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);\n }\n else if (_global[EVENT_TARGET]) {\n apis.push(EVENT_TARGET);\n }\n else {\n // Note: EventTarget is not available in all browsers,\n // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n apis = NO_EVENT_TARGET;\n }\n var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;\n var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;\n var ieOrEdge = isIEOrEdge();\n var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';\n var FUNCTION_WRAPPER = '[object FunctionWrapper]';\n var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';\n // predefine all __zone_symbol__ + eventName + true/false string\n for (var i = 0; i < eventNames.length; i++) {\n var eventName = eventNames[i];\n var falseEventName = eventName + FALSE_STR;\n var trueEventName = eventName + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames$1[eventName] = {};\n zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;\n }\n // predefine all task.source string\n for (var i = 0; i < WTF_ISSUE_555.length; i++) {\n var target = WTF_ISSUE_555_ARRAY[i];\n var targets = globalSources[target] = {};\n for (var j = 0; j < eventNames.length; j++) {\n var eventName = eventNames[j];\n targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;\n }\n }\n var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {\n if (!isDisableIECheck && ieOrEdge) {\n if (isEnableCrossContextCheck) {\n try {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n else {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n }\n else if (isEnableCrossContextCheck) {\n try {\n delegate.toString();\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n return true;\n };\n var apiTypes = [];\n for (var i = 0; i < apis.length; i++) {\n var type = _global[apis[i]];\n apiTypes.push(type && type.prototype);\n }\n // vh is validateHandler to check event handler\n // is valid or not(for security check)\n patchEventTarget(_global, apiTypes, { vh: checkIEAndCrossContext });\n api.patchEventTarget = patchEventTarget;\n return true;\n}\nfunction patchEvent(global, api) {\n patchEventPrototype(global, api);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction patchCallbacks(target, targetName, method, callbacks) {\n var symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n var nativeDelegate = target[symbol] = target[method];\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n var source = targetName + \".\" + method + \"::\" + callback;\n var prototype = opts.prototype;\n if (prototype.hasOwnProperty(callback)) {\n var descriptor = ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = wrapWithCurrentZone(descriptor.value, source);\n _redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = wrapWithCurrentZone(prototype[callback], source);\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n attachOriginToPatched(target[method], nativeDelegate);\n}\nfunction registerElementPatch(_global) {\n if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {\n return;\n }\n var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n patchCallbacks(document, 'Document', 'registerElement', callbacks);\n}\nfunction patchCustomElements(_global) {\n if ((!isBrowser && !isMix) || !('customElements' in _global)) {\n return;\n }\n var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback'];\n patchCallbacks(_global.customElements, 'customElements', 'define', callbacks);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nZone.__load_patch('util', function (global, Zone, api) {\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n});\nZone.__load_patch('timers', function (global) {\n var set = 'set';\n var clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n});\nZone.__load_patch('requestAnimationFrame', function (global) {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n});\nZone.__load_patch('blocking', function (global, Zone) {\n var blockingMethods = ['alert', 'prompt', 'confirm'];\n for (var i = 0; i < blockingMethods.length; i++) {\n var name_1 = blockingMethods[i];\n patchMethod(global, name_1, function (delegate, symbol, name) {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n});\nZone.__load_patch('EventTarget', function (global, Zone, api) {\n // load blackListEvents from global\n var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]);\n }\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n patchClass('IntersectionObserver');\n patchClass('FileReader');\n});\nZone.__load_patch('on_property', function (global, Zone, api) {\n propertyDescriptorPatch(api, global);\n propertyPatch();\n});\nZone.__load_patch('customElements', function (global, Zone, api) {\n registerElementPatch(global);\n patchCustomElements(global);\n});\nZone.__load_patch('canvas', function (global) {\n var HTMLCanvasElement = global['HTMLCanvasElement'];\n if (typeof HTMLCanvasElement !== 'undefined' && HTMLCanvasElement.prototype &&\n HTMLCanvasElement.prototype.toBlob) {\n patchMacroTask(HTMLCanvasElement.prototype, 'toBlob', function (self, args) {\n return { name: 'HTMLCanvasElement.toBlob', target: self, cbIdx: 0, args: args };\n });\n }\n});\nZone.__load_patch('XHR', function (global, Zone) {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n var XHR_TASK = zoneSymbol('xhrTask');\n var XHR_SYNC = zoneSymbol('xhrSync');\n var XHR_LISTENER = zoneSymbol('xhrListener');\n var XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n var XHR_URL = zoneSymbol('xhrURL');\n var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) {\n return target[XHR_TASK];\n }\n var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n var READY_STATE_CHANGE = 'readystatechange';\n var SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n var data = task.data;\n var target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n var listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n var newListener = target[XHR_LISTENER] = function () {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n var loadTasks = target['__zone_symbol__loadfalse'];\n if (loadTasks && loadTasks.length > 0) {\n var oriInvoke_1 = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n var loadTasks = target['__zone_symbol__loadfalse'];\n for (var i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke_1.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n };\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n var storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n var data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n }; });\n var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n var fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false };\n var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n }; });\n var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) {\n var task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n }; });\n }\n});\nZone.__load_patch('geolocation', function (global) {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n});\nZone.__load_patch('PromiseRejectionEvent', function (global, Zone) {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n var eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach(function (eventTask) {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n var PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n})));\n","/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n * 2. Application imports. Files imported after ZoneJS that should be loaded before your main\n * file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE9, IE10 and IE11 requires all of the following polyfills. **/\n// import 'core-js/es6/symbol';\n// import 'core-js/es6/object';\n// import 'core-js/es6/function';\n// import 'core-js/es6/parse-int';\n// import 'core-js/es6/parse-float';\n// import 'core-js/es6/number';\n// import 'core-js/es6/math';\n// import 'core-js/es6/string';\n// import 'core-js/es6/date';\n// import 'core-js/es6/array';\n// import 'core-js/es6/regexp';\n// import 'core-js/es6/map';\n// import 'core-js/es6/weak-map';\n// import 'core-js/es6/set';\n\n/**\n * If the application will be indexed by Google Search, the following is required.\n * Googlebot uses a renderer based on Chrome 41.\n * https://developers.google.com/search/docs/guides/rendering\n **/\n// import 'core-js/es6/array';\n\n//global.Buffer = global.Buffer || require('buffer').Buffer;\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js'; // Run `npm install --save classlist.js`.\n\n/** IE10 and IE11 requires the following for the Reflect API. */\n// import 'core-js/es6/reflect';\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n **/\n// import 'web-animations-js'; // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n */\n\n // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n\n /*\n * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n * with the following flag, it will bypass `zone.js` patch for IE/Edge\n */\n// (window as any).__Zone_enable_cross_context_check = true;\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\n\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"],"sourceRoot":""} \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/runtime.js b/internals/WebUI/dist/WebUI/runtime.js deleted file mode 100644 index fd2c03c..0000000 --- a/internals/WebUI/dist/WebUI/runtime.js +++ /dev/null @@ -1,154 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "runtime": 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // run deferred modules from other chunks -/******/ checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ([]); -//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/runtime.js.map b/internals/WebUI/dist/WebUI/runtime.js.map deleted file mode 100644 index c9491c1..0000000 --- a/internals/WebUI/dist/WebUI/runtime.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAiB,4BAA4B;AAC7C;AACA;AACA,0BAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAgB,uBAAuB;AACvC;;;AAGA;AACA","file":"runtime.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(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 \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/internals/WebUI/dist/WebUI/styles.js b/internals/WebUI/dist/WebUI/styles.js deleted file mode 100644 index 153e1d6..0000000 --- a/internals/WebUI/dist/WebUI/styles.js +++ /dev/null @@ -1,606 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["styles"],{ - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/@angular-devkit/build-angular/node_modules/sass-loader/lib/loader.js?!./src/styles.scss": -/*!*****************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/@angular-devkit/build-angular/node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss ***! - \*****************************************************************************************************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = [[module.i, "/* You can add global styles to this file, and also import other style files */\nhtml, body {\n height: 100%; }\nbody {\n margin: 0;\n font-family: Roboto, \"Helvetica Neue\", sans-serif; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9hcHAvc3JjL3N0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUFBO0FBRUE7RUFBYSxZQUFZLEVBQUE7QUFDekI7RUFBTyxTQUFTO0VBQUUsaURBQWlELEVBQUEiLCJmaWxlIjoic3JjL3N0eWxlcy5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogWW91IGNhbiBhZGQgZ2xvYmFsIHN0eWxlcyB0byB0aGlzIGZpbGUsIGFuZCBhbHNvIGltcG9ydCBvdGhlciBzdHlsZSBmaWxlcyAqL1xuXG5odG1sLCBib2R5IHsgaGVpZ2h0OiAxMDAlOyB9XG5ib2R5IHsgbWFyZ2luOiAwOyBmb250LWZhbWlseTogUm9ib3RvLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7IH1cbiJdfQ== */", '', '']] - -/***/ }), - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css": -/*!**********************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css ***! - \**********************************************************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = [[module.i, ".mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-badge-small .mat-badge-content{font-size:6px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 12px}.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-caption,.mat-small{font:400 12px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 56px;letter-spacing:-.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px;letter-spacing:-.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,\"Helvetica Neue\",sans-serif;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-card{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-content,.mat-card-subtitle{font-size:14px}.mat-checkbox{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}.mat-table{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif}.mat-expansion-panel-header{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.33333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.33334%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.33334%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.33333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.33334%}.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-select{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,\"Helvetica Neue\",sans-serif;margin:0}.mat-tooltip{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-list-option{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,\"Helvetica Neue\",sans-serif}.mat-simple-snackbar{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,\"Helvetica Neue\",sans-serif}.mat-nested-tree-node,.mat-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0s cubic-bezier(0,0,.2,1);transform:scale(0)}@media (-ms-high-contrast:active){.mat-ripple-element{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}@-webkit-keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-start{/*!*/}@-webkit-keyframes cdk-text-field-autofill-end{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{height:auto!important;overflow:hidden!important;padding:2px 0!important;box-sizing:content-box!important}.mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-option{color:rgba(0,0,0,.87)}.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(0,0,0,.04)}.mat-option.mat-active{background:rgba(0,0,0,.04);color:rgba(0,0,0,.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,.38)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#673ab7}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#ffd740}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}.mat-optgroup-label{color:rgba(0,0,0,.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-disabled{color:#b0b0b0}.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#ffd740}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#673ab7}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-autocomplete-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,.87)}.mat-badge-content{color:#fff;background:#673ab7}@media (-ms-high-contrast:active){.mat-badge-content{outline:solid 1px;border-radius:0}}.mat-badge-accent .mat-badge-content{background:#ffd740;color:rgba(0,0,0,.87)}.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}.mat-badge{position:relative}.mat-badge-hidden .mat-badge-content{display:none}.mat-badge-disabled .mat-badge-content{background:#b9b9b9;color:rgba(0,0,0,.38)}.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.mat-badge-content.mat-badge-active{transform:none}.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:0 0}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#673ab7}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#ffd740}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}.mat-button.mat-accent[disabled],.mat-button.mat-primary[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled],.mat-stroked-button.mat-accent[disabled],.mat-stroked-button.mat-primary[disabled],.mat-stroked-button.mat-warn[disabled],.mat-stroked-button[disabled][disabled]{color:rgba(0,0,0,.26)}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:#673ab7}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:#ffd740}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:#f44336}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay,.mat-stroked-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button .mat-ripple-element,.mat-icon-button .mat-ripple-element,.mat-stroked-button .mat-ripple-element{opacity:.1;background-color:currentColor}.mat-button-focus-overlay{background:#000}.mat-stroked-button:not([disabled]){border-color:rgba(0,0,0,.12)}.mat-fab,.mat-flat-button,.mat-mini-fab,.mat-raised-button{color:rgba(0,0,0,.87);background-color:#fff}.mat-fab.mat-primary,.mat-flat-button.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{color:#fff}.mat-fab.mat-accent,.mat-flat-button.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{color:rgba(0,0,0,.87)}.mat-fab.mat-warn,.mat-flat-button.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{color:#fff}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{color:rgba(0,0,0,.26)}.mat-fab.mat-primary,.mat-flat-button.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#673ab7}.mat-fab.mat-accent,.mat-flat-button.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#ffd740}.mat-fab.mat-warn,.mat-flat-button.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{background-color:rgba(0,0,0,.12)}.mat-fab.mat-primary .mat-ripple-element,.mat-flat-button.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-fab.mat-accent .mat-ripple-element,.mat-flat-button.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)}.mat-fab.mat-warn .mat-ripple-element,.mat-flat-button.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}.mat-flat-button:not([class*=mat-elevation-z]),.mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-raised-button[disabled]:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-fab:not([class*=mat-elevation-z]),.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]),.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab[disabled]:not([class*=mat-elevation-z]),.mat-mini-fab[disabled]:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-button-toggle-group,.mat-button-toggle-standalone{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard,.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{box-shadow:none}.mat-button-toggle{color:rgba(0,0,0,.38)}.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,.12)}.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87);background:#fff}.mat-button-toggle-appearance-standard .mat-button-toggle-focus-overlay{background-color:#000}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:solid 1px rgba(0,0,0,.12)}[dir=rtl] .mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle+.mat-button-toggle{border-left:none;border-right:none;border-top:solid 1px rgba(0,0,0,.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,.54)}.mat-button-toggle-checked.mat-button-toggle-appearance-standard{color:rgba(0,0,0,.87)}.mat-button-toggle-disabled{color:rgba(0,0,0,.26);background-color:#eee}.mat-button-toggle-disabled.mat-button-toggle-appearance-standard{background:#fff}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-button-toggle-group-appearance-standard,.mat-button-toggle-standalone.mat-button-toggle-appearance-standard{border:solid 1px rgba(0,0,0,.12)}.mat-card{background:#fff;color:rgba(0,0,0,.87)}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.mat-card.mat-card-flat:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-card-subtitle{color:rgba(0,0,0,.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,.54)}.mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa!important}@media (-ms-high-contrast:black-on-white){.mat-checkbox-checkmark-path{stroke:#000!important}}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#673ab7}.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#ffd740}.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:rgba(0,0,0,.54)}@media (-ms-high-contrast:active){.mat-checkbox-disabled{opacity:.5}}@media (-ms-high-contrast:active){.mat-checkbox-background{background:0 0}}.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{background-color:#673ab7}.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:#ffd740}.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:#f44336}.mat-chip.mat-standard-chip{background-color:#e0e0e0;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip:not(.mat-chip-disabled):active{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.mat-chip.mat-standard-chip:not(.mat-chip-disabled) .mat-chip-remove:hover{opacity:.54}.mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.4}.mat-chip.mat-standard-chip::after{background:#000}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#673ab7;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-ripple-element{background:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-ripple-element{background:rgba(255,255,255,.1)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#ffd740;color:rgba(0,0,0,.87)}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-ripple-element{background:rgba(0,0,0,.1)}.mat-table{background:#fff}.mat-table tbody,.mat-table tfoot,.mat-table thead,.mat-table-sticky,[mat-footer-row],[mat-header-row],[mat-row],mat-footer-row,mat-header-row,mat-row{background:inherit}mat-footer-row,mat-header-row,mat-row,td.mat-cell,td.mat-footer-cell,th.mat-header-cell{border-bottom-color:rgba(0,0,0,.12)}.mat-header-cell{color:rgba(0,0,0,.54)}.mat-cell,.mat-footer-cell{color:rgba(0,0,0,.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,.54)}.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button,.mat-datepicker-toggle{color:rgba(0,0,0,.54)}.mat-calendar-table-header{color:rgba(0,0,0,.38)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,.12)}.mat-calendar-body-label{color:rgba(0,0,0,.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(0,0,0,.38)}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,.04)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.38)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,.18)}.mat-calendar-body-selected{background-color:#673ab7;color:#fff}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(103,58,183,.4)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);background-color:#fff;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#ffd740;color:rgba(0,0,0,.87)}.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(255,215,64,.4)}.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}.mat-datepicker-content-touch{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-datepicker-toggle-active{color:#673ab7}.mat-datepicker-toggle-active.mat-accent{color:#ffd740}.mat-datepicker-toggle-active.mat-warn{color:#f44336}.mat-dialog-container{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);background:#fff;color:rgba(0,0,0,.87)}.mat-divider{border-top-color:rgba(0,0,0,.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,.87)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-action-row{border-top-color:rgba(0,0,0,.12)}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}@media (hover:none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#fff}}.mat-expansion-panel-header-title{color:rgba(0,0,0,.87)}.mat-expansion-indicator::after,.mat-expansion-panel-header-description{color:rgba(0,0,0,.54)}.mat-expansion-panel-header[aria-disabled=true]{color:rgba(0,0,0,.26)}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}.mat-form-field-label{color:rgba(0,0,0,.6)}.mat-hint{color:rgba(0,0,0,.6)}.mat-form-field.mat-focused .mat-form-field-label{color:#673ab7}.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#ffd740}.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}.mat-focused .mat-form-field-required-marker{color:#ffd740}.mat-form-field-ripple{background-color:rgba(0,0,0,.87)}.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#673ab7}.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#ffd740}.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid) .mat-form-field-infix::after{color:#673ab7}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-accent .mat-form-field-infix::after{color:#ffd740}.mat-form-field-type-mat-native-select.mat-focused:not(.mat-form-field-invalid).mat-warn .mat-form-field-infix::after{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker,.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent{color:#f44336}.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}.mat-error{color:#f44336}.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-hint{color:rgba(0,0,0,.54)}.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(0,0,0,.04)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(0,0,0,.02)}.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(0,0,0,.42)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(0,0,0,.12)}.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:rgba(0,0,0,.87)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#673ab7}.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#ffd740}.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(0,0,0,.38)}.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(0,0,0,.06)}.mat-icon.mat-primary{color:#673ab7}.mat-icon.mat-accent{color:#ffd740}.mat-icon.mat-warn{color:#f44336}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{color:rgba(0,0,0,.54)}.mat-form-field-type-mat-native-select.mat-form-field-disabled .mat-form-field-infix::after,.mat-input-element:disabled{color:rgba(0,0,0,.38)}.mat-input-element{caret-color:#673ab7}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,.42)}.mat-accent .mat-input-element{caret-color:#ffd740}.mat-form-field-invalid .mat-input-element,.mat-warn .mat-input-element{caret-color:#f44336}.mat-form-field-type-mat-native-select.mat-form-field-invalid .mat-form-field-infix::after{color:#f44336}.mat-list-base .mat-list-item{color:rgba(0,0,0,.87)}.mat-list-base .mat-list-option{color:rgba(0,0,0,.87)}.mat-list-base .mat-subheader{color:rgba(0,0,0,.54)}.mat-list-item-disabled{background-color:#eee}.mat-action-list .mat-list-item:focus,.mat-action-list .mat-list-item:hover,.mat-list-option:focus,.mat-list-option:hover,.mat-nav-list .mat-list-item:focus,.mat-nav-list .mat-list-item:hover{background:rgba(0,0,0,.04)}.mat-menu-panel{background:#fff}.mat-menu-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-menu-item{background:0 0;color:rgba(0,0,0,.87)}.mat-menu-item[disabled],.mat-menu-item[disabled]::after{color:rgba(0,0,0,.38)}.mat-menu-item .mat-icon-no-color,.mat-menu-item-submenu-trigger::after{color:rgba(0,0,0,.54)}.mat-menu-item-highlighted:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(0,0,0,.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,.54);border-right:2px solid rgba(0,0,0,.54)}.mat-paginator-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,.38)}.mat-progress-bar-background{fill:#d1c4e9}.mat-progress-bar-buffer{background-color:#d1c4e9}.mat-progress-bar-fill::after{background-color:#673ab7}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#ffe57f}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#ffe57f}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#ffd740}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336}.mat-progress-spinner circle,.mat-spinner circle{stroke:#673ab7}.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#ffd740}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}.mat-radio-outer-circle{border-color:rgba(0,0,0,.54)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#673ab7}.mat-radio-button.mat-primary .mat-radio-inner-circle,.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#673ab7}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ffd740}.mat-radio-button.mat-accent .mat-radio-inner-circle,.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-accent:active .mat-radio-persistent-ripple{background-color:#ffd740}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}.mat-radio-button.mat-warn .mat-radio-inner-circle,.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-persistent-ripple,.mat-radio-button.mat-warn:active .mat-radio-persistent-ripple{background-color:#f44336}.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle{border-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(0,0,0,.38)}.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,.38)}.mat-radio-button .mat-ripple-element{background-color:#000}.mat-select-value{color:rgba(0,0,0,.87)}.mat-select-placeholder{color:rgba(0,0,0,.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,.38)}.mat-select-arrow{color:rgba(0,0,0,.54)}.mat-select-panel{background:#fff}.mat-select-panel:not([class*=mat-elevation-z]){box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#673ab7}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#ffd740}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(0,0,0,.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer:not(.mat-drawer-side){box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.mat-drawer-side{border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-side.mat-drawer-end{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side{border-left:solid 1px rgba(0,0,0,.12);border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-left:none;border-right:solid 1px rgba(0,0,0,.12)}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,.6)}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#ffd740}.mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:rgba(255,215,64,.54)}.mat-slide-toggle.mat-checked .mat-ripple-element{background-color:#ffd740}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-thumb{background-color:#673ab7}.mat-slide-toggle.mat-primary.mat-checked .mat-slide-toggle-bar{background-color:rgba(103,58,183,.54)}.mat-slide-toggle.mat-primary.mat-checked .mat-ripple-element{background-color:#673ab7}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-thumb{background-color:#f44336}.mat-slide-toggle.mat-warn.mat-checked .mat-slide-toggle-bar{background-color:rgba(244,67,54,.54)}.mat-slide-toggle.mat-warn.mat-checked .mat-ripple-element{background-color:#f44336}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:#000}.mat-slide-toggle-thumb{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#673ab7}.mat-primary .mat-slider-thumb-label-text{color:#fff}.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#ffd740}.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}.mat-warn .mat-slider-thumb-label-text{color:#fff}.mat-slider-focus-ring{background-color:rgba(255,215,64,.2)}.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(0,0,0,.38)}.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill{background-color:rgba(0,0,0,.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(0,0,0,.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,.7)}.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom,rgba(0,0,0,.7),rgba(0,0,0,.7) 2px,transparent 0,transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,.04)}@media (hover:none){.mat-step-header:hover{background:0 0}}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,.54)}.mat-step-header .mat-step-icon{background-color:rgba(0,0,0,.54);color:#fff}.mat-step-header .mat-step-icon-selected,.mat-step-header .mat-step-icon-state-done,.mat-step-header .mat-step-icon-state-edit{background-color:#673ab7;color:#fff}.mat-step-header .mat-step-icon-state-error{background-color:transparent;color:#f44336}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,.87)}.mat-step-header .mat-step-label.mat-step-label-error{color:#f44336}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{border-left-color:rgba(0,0,0,.12)}.mat-horizontal-stepper-header::after,.mat-horizontal-stepper-header::before,.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,.12)}.mat-sort-header-arrow{color:#757575}.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(0,0,0,.12)}.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(0,0,0,.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.38)}.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#673ab7}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#ffd740}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(0,0,0,.87)}.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(209,196,233,.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#673ab7}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:#fff}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(255,255,255,.12)}.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,229,127,.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#ffd740}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(0,0,0,.12)}.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#f44336}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:rgba(255,255,255,.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,.87)}.mat-toolbar.mat-primary{background:#673ab7;color:#fff}.mat-toolbar.mat-accent{background:#ffd740;color:rgba(0,0,0,.87)}.mat-toolbar.mat-warn{background:#f44336;color:#fff}.mat-toolbar .mat-focused .mat-form-field-ripple,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-form-field-underline{background-color:currentColor}.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-select-value{color:inherit}.mat-toolbar .mat-input-element{caret-color:currentColor}.mat-tooltip{background:rgba(97,97,97,.9)}.mat-tree{background:#fff}.mat-nested-tree-node,.mat-tree-node{color:rgba(0,0,0,.87)}.mat-snack-bar-container{color:rgba(255,255,255,.7);background:#323232;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-simple-snackbar-action{color:#ffd740}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9AYW5ndWxhci9tYXRlcmlhbC9wcmVidWlsdC10aGVtZXMvZGVlcHB1cnBsZS1hbWJlci5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CLGVBQWUsQ0FBQyxjQUFjLENBQUMsOENBQThDLENBQUMsb0NBQW9DLGFBQWEsQ0FBQyxvQ0FBb0MsY0FBYyxDQUFDLHlDQUF5QyxxREFBcUQsQ0FBQyxlQUFlLENBQUMsc0NBQXNDLHFEQUFxRCxDQUFDLGVBQWUsQ0FBQyw2Q0FBNkMscURBQXFELENBQUMsZUFBZSxDQUFDLDZDQUE2QyxxREFBcUQsQ0FBQyxlQUFlLENBQUMsMkJBQTJCLHdEQUF3RCxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsdURBQXVELENBQUMsZUFBZSxDQUFDLDZCQUE2QixxREFBcUQsQ0FBQyxzQ0FBc0MscURBQXFELENBQUMsNENBQTRDLGVBQWUsQ0FBQyx3QkFBd0IscURBQXFELENBQUMsOENBQThDLHVEQUF1RCxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyw4Q0FBOEMscURBQXFELENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLDhDQUE4QyxxREFBcUQsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsOENBQThDLHFEQUFxRCxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIscURBQXFELENBQUMsNEdBQTRHLDhDQUE4QyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLDhDQUE4QyxDQUFDLFVBQVUsOENBQThDLENBQUMsZ0JBQWdCLGNBQWMsQ0FBQyxlQUFlLENBQUMsaUNBQWlDLGNBQWMsQ0FBQyxxQ0FBcUMsY0FBYyxDQUFDLGNBQWMsOENBQThDLENBQUMseUNBQXlDLGdCQUFnQixDQUFDLFVBQVUsY0FBYyxDQUFDLGVBQWUsQ0FBQywrRUFBK0UsY0FBYyxDQUFDLFdBQVcsOENBQThDLENBQUMsaUJBQWlCLGNBQWMsQ0FBQyxlQUFlLENBQUMsMkJBQTJCLGNBQWMsQ0FBQyxjQUFjLDhDQUE4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OFEsMEJBQTBCLENBQUMsOElBQThJLGlCQUFpQixDQUFDLHNOQUFzTixpQ0FBaUMsQ0FBQyxnSEFBZ0gsc0NBQXNDLENBQUMsYUFBYSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyx5QkFBeUIsa0JBQWtCLENBQUMsVUFBVSxDQUFDLHdCQUF3QixrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0Isa0JBQWtCLENBQUMsVUFBVSxDQUFDLDRIQUE0SCw2QkFBNkIsQ0FBQyw0TUFBNE0sYUFBYSxDQUFDLGdDQUFnQyx3QkFBd0IsQ0FBQyxhQUFhLDRCQUE0QixDQUFDLFVBQVUsZUFBZSxDQUFDLHFDQUFxQyxxQkFBcUIsQ0FBQyx5QkFBeUIsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsa0dBQWtHLENBQUMsNEJBQTRCLGFBQWEiLCJmaWxlIjoibm9kZV9tb2R1bGVzL0Bhbmd1bGFyL21hdGVyaWFsL3ByZWJ1aWx0LXRoZW1lcy9kZWVwcHVycGxlLWFtYmVyLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIDExLjYycHgvMjBweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LTIsLm1hdC1ib2R5LXN0cm9uZ3tmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA1NnB4O2xldHRlci1zcGFjaW5nOi0uMDVlbX0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmO21hcmdpbjowIDAgNjRweDtsZXR0ZXItc3BhY2luZzotLjAwNWVtfS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1jb250ZW50LC5tYXQtY2FyZC1zdWJ0aXRsZXtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LS44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMXB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMWVtKSBzY2FsZSguNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0uMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyLC5tYXQtZ3JpZC10aWxlLWhlYWRlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudHttYXJnaW4tdG9wOi0uMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLFwiSGVsdmV0aWNhIE5ldWVcIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsc2Fucy1zZXJpZn0ubWF0LW5lc3RlZC10cmVlLW5vZGUsLm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNmb3JtOnNjYWxlKDApfUBtZWRpYSAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX19LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciwuY2RrLW92ZXJsYXktY29udGFpbmVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn19LmNkay1vdmVybGF5LWRhcmstYmFja2Ryb3B7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zMil9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojNjczYWI3fS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmQ3NDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXBzZXVkby1jaGVja2JveHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiNmYWZhZmF9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmZDc0MH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2NzNhYjd9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgMXB4IDFweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAzcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAzcHggNHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA1cHggOHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE0cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowIDRweCA1cHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDdweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAycHggMTZweCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjAgNXB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOXB4IDEycHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNnB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCAxMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAxOHB4IDNweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MCA2cHggN3B4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDRweCAyMHB4IDNweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxM3B4IDE5cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyNHB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MCA3cHggOXB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyNnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MCA4cHggOXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNXB4IDIycHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAyOHB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjAgOHB4IDExcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE3cHggMjZweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowIDlweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxOHB4IDI4cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDdweCAzNHB4IDZweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MCA5cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMTlweCAyOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzZweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMHB4IDMxcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCAzOHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MCAxMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIxcHggMzNweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowIDEwcHggMTRweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjJweCAzNXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggNDJweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjAgMTFweCAxNHB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyM3B4IDM2cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NHB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MCAxMXB4IDE1cHggLTdweCByZ2JhKDAsMCwwLC4yKSwwIDI0cHggMzhweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzY3M2FiN31AbWVkaWEgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH19Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmZDc0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYjliOWI5O2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJhZGdlLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zZm9ybTpzY2FsZSguNik7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmV7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzY3M2FiN30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZDc0MH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojMDAwfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtkaXNhYmxlZF0pe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC1mYWIubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LWZhYi5tYXQtd2FybiwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b246bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiW2Rpc2FibGVkXTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LW1pbmktZmFiW2Rpc2FibGVkXTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25le2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgMXB4IDFweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAzcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDAgMCAwIHJnYmEoMCwwLDAsLjIpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTQpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH1AbWVkaWEgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmQ3NDB9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9QG1lZGlhICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX19QG1lZGlhICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH19Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LWNoZWNrYm94Om5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6MCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAzcHggNHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6IzAwMH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjczYWI3O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LC5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZS1zdGlja3ksW21hdC1mb290ZXItcm93XSxbbWF0LWhlYWRlci1yb3ddLFttYXQtcm93XSxtYXQtZm9vdGVyLXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtcm93e2JhY2tncm91bmQ6aW5oZXJpdH1tYXQtZm9vdGVyLXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbCx0aC5tYXQtaGVhZGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FsZW5kYXItYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjc7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmZkNzQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMTUsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6IzY3M2FiN30ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZmQ3NDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRpYWxvZy1jb250YWluZXJ7Ym94LXNoYWRvdzowIDExcHggMTVweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjRweCAzOHB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDZweCA4cHggcmdiYSgwLDAsMCwuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYSAoaG92ZXI6bm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1oaW50e2NvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzY3M2FiN30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzY3M2FiN30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2NzNhYjd9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2NzNhYjd9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjczYWI3fS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiNmZmQ3NDB9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlciwubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3fS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDFjNGU5fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzY3M2FiN30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjZGQyfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjd9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6IzY3M2FiN30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzY3M2FiN30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmZkNzQwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmQ3NDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2NzNhYjd9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmZDc0MH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowIDhweCAxMHB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMHB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmQ3NDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjE1LDY0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmQ3NDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjczYWI3fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojNjczYWI3fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MCAycHggMXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCAxcHggMXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDNweCAwIHJnYmEoMCwwLDAsLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMTUsNjQsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhIChob3Zlcjpub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6MCAwfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjU0KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjc7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOSwxOTYsMjMzLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNjczYWI3fS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjksMTI3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDksMTk2LDIzMywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjd9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmZDc0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2NzNhYjc7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNmZmQ3NDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7YmFja2dyb3VuZDojZmZmfS5tYXQtbmVzdGVkLXRyZWUtbm9kZSwubWF0LXRyZWUtbm9kZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6IzMyMzIzMjtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmZDc0MH0iXX0= */", '', '']] - -/***/ }), - -/***/ "./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css": -/*!*****************************************************************************!*\ - !*** ./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css ***! - \*****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - - -var content = __webpack_require__(/*! !../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../postcss-loader/src??embedded!./deeppurple-amber.css */ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css"); - -if(typeof content === 'string') content = [[module.i, content, '']]; - -var transform; -var insertInto; - - - -var options = {"hmr":true} - -options.transform = transform -options.insertInto = undefined; - -var update = __webpack_require__(/*! ../../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options); - -if(content.locals) module.exports = content.locals; - -if(false) {} - -/***/ }), - -/***/ "./node_modules/style-loader/lib/addStyles.js": -/*!****************************************************!*\ - !*** ./node_modules/style-loader/lib/addStyles.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -var stylesInDom = {}; - -var memoize = function (fn) { - var memo; - - return function () { - if (typeof memo === "undefined") memo = fn.apply(this, arguments); - return memo; - }; -}; - -var isOldIE = memoize(function () { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - return window && document && document.all && !window.atob; -}); - -var getTarget = function (target, parent) { - if (parent){ - return parent.querySelector(target); - } - return document.querySelector(target); -}; - -var getElement = (function (fn) { - var memo = {}; - - return function(target, parent) { - // If passing function in options, then use it for resolve "head" element. - // Useful for Shadow Root style i.e - // { - // insertInto: function () { return document.querySelector("#foo").shadowRoot } - // } - if (typeof target === 'function') { - return target(); - } - if (typeof memo[target] === "undefined") { - var styleTarget = getTarget.call(this, target, parent); - // Special case to return head of iframe instead of iframe itself - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch(e) { - styleTarget = null; - } - } - memo[target] = styleTarget; - } - return memo[target] - }; -})(); - -var singleton = null; -var singletonCounter = 0; -var stylesInsertedAtTop = []; - -var fixUrls = __webpack_require__(/*! ./urls */ "./node_modules/style-loader/lib/urls.js"); - -module.exports = function(list, options) { - if (typeof DEBUG !== "undefined" && DEBUG) { - if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); - } - - options = options || {}; - - options.attrs = typeof options.attrs === "object" ? options.attrs : {}; - - // Force single-tag solution on IE6-9, which has a hard limit on the # of - - - could become: - - -
- -
- - Note the use of @polyfill in the comment above a ShadowDOM specific style - declaration. This is a directive to the styling shim to use the selector - in comments in lieu of the next selector when running under polyfill. -*/ -var ShadowCss = /** @class */ (function () { - function ShadowCss() { - this.strictStyling = true; - } - /* - * Shim some cssText with the given selector. Returns cssText that can - * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css). - * - * When strictStyling is true: - * - selector is the attribute added to all elements inside the host, - * - hostSelector is the attribute added to the host itself. - */ - ShadowCss.prototype.shimCssText = function (cssText, selector, hostSelector) { - if (hostSelector === void 0) { hostSelector = ''; } - var commentsWithHash = extractCommentsWithHash(cssText); - cssText = stripComments(cssText); - cssText = this._insertDirectives(cssText); - var scopedCssText = this._scopeCssText(cssText, selector, hostSelector); - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([scopedCssText], commentsWithHash).join('\n'); - }; - ShadowCss.prototype._insertDirectives = function (cssText) { - cssText = this._insertPolyfillDirectivesInCssText(cssText); - return this._insertPolyfillRulesInCssText(cssText); - }; - /* - * Process styles to convert native ShadowDOM rules that will trip - * up the css parser; we rely on decorating the stylesheet with inert rules. - * - * For example, we convert this rule: - * - * polyfill-next-selector { content: ':host menu-item'; } - * ::content menu-item { - * - * to this: - * - * scopeName menu-item { - * - **/ - ShadowCss.prototype._insertPolyfillDirectivesInCssText = function (cssText) { - // Difference with webcomponents.js: does not handle comments - return cssText.replace(_cssContentNextSelectorRe, function () { - var m = []; - for (var _i = 0; _i < arguments.length; _i++) { - m[_i] = arguments[_i]; - } - return m[2] + '{'; - }); - }; - /* - * Process styles to add rules which will only apply under the polyfill - * - * For example, we convert this rule: - * - * polyfill-rule { - * content: ':host menu-item'; - * ... - * } - * - * to this: - * - * scopeName menu-item {...} - * - **/ - ShadowCss.prototype._insertPolyfillRulesInCssText = function (cssText) { - // Difference with webcomponents.js: does not handle comments - return cssText.replace(_cssContentRuleRe, function () { - var m = []; - for (var _i = 0; _i < arguments.length; _i++) { - m[_i] = arguments[_i]; - } - var rule = m[0].replace(m[1], '').replace(m[2], ''); - return m[4] + rule; - }); - }; - /* Ensure styles are scoped. Pseudo-scoping takes a rule like: - * - * .foo {... } - * - * and converts this to - * - * scopeName .foo { ... } - */ - ShadowCss.prototype._scopeCssText = function (cssText, scopeSelector, hostSelector) { - var unscopedRules = this._extractUnscopedRulesFromCssText(cssText); - // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively - cssText = this._insertPolyfillHostInCssText(cssText); - cssText = this._convertColonHost(cssText); - cssText = this._convertColonHostContext(cssText); - cssText = this._convertShadowDOMSelectors(cssText); - if (scopeSelector) { - cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector); - } - cssText = cssText + '\n' + unscopedRules; - return cssText.trim(); - }; - /* - * Process styles to add rules which will only apply under the polyfill - * and do not process via CSSOM. (CSSOM is destructive to rules on rare - * occasions, e.g. -webkit-calc on Safari.) - * For example, we convert this rule: - * - * @polyfill-unscoped-rule { - * content: 'menu-item'; - * ... } - * - * to this: - * - * menu-item {...} - * - **/ - ShadowCss.prototype._extractUnscopedRulesFromCssText = function (cssText) { - // Difference with webcomponents.js: does not handle comments - var r = ''; - var m; - _cssContentUnscopedRuleRe.lastIndex = 0; - while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) { - var rule = m[0].replace(m[2], '').replace(m[1], m[4]); - r += rule + '\n\n'; - } - return r; - }; - /* - * convert a rule like :host(.foo) > .bar { } - * - * to - * - * .foo > .bar - */ - ShadowCss.prototype._convertColonHost = function (cssText) { - return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer); - }; - /* - * convert a rule like :host-context(.foo) > .bar { } - * - * to - * - * .foo > .bar, .foo scopeName > .bar { } - * - * and - * - * :host-context(.foo:host) .bar { ... } - * - * to - * - * .foo .bar { ... } - */ - ShadowCss.prototype._convertColonHostContext = function (cssText) { - return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer); - }; - ShadowCss.prototype._convertColonRule = function (cssText, regExp, partReplacer) { - // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule - return cssText.replace(regExp, function () { - var m = []; - for (var _i = 0; _i < arguments.length; _i++) { - m[_i] = arguments[_i]; - } - if (m[2]) { - var parts = m[2].split(','); - var r = []; - for (var i = 0; i < parts.length; i++) { - var p = parts[i].trim(); - if (!p) - break; - r.push(partReplacer(_polyfillHostNoCombinator, p, m[3])); - } - return r.join(','); - } - else { - return _polyfillHostNoCombinator + m[3]; - } - }); - }; - ShadowCss.prototype._colonHostContextPartReplacer = function (host, part, suffix) { - if (part.indexOf(_polyfillHost) > -1) { - return this._colonHostPartReplacer(host, part, suffix); - } - else { - return host + part + suffix + ', ' + part + ' ' + host + suffix; - } - }; - ShadowCss.prototype._colonHostPartReplacer = function (host, part, suffix) { - return host + part.replace(_polyfillHost, '') + suffix; - }; - /* - * Convert combinators like ::shadow and pseudo-elements like ::content - * by replacing with space. - */ - ShadowCss.prototype._convertShadowDOMSelectors = function (cssText) { - return _shadowDOMSelectorsRe.reduce(function (result, pattern) { return result.replace(pattern, ' '); }, cssText); - }; - // change a selector like 'div' to 'name div' - ShadowCss.prototype._scopeSelectors = function (cssText, scopeSelector, hostSelector) { - var _this = this; - return processRules(cssText, function (rule) { - var selector = rule.selector; - var content = rule.content; - if (rule.selector[0] != '@') { - selector = - _this._scopeSelector(rule.selector, scopeSelector, hostSelector, _this.strictStyling); - } - else if (rule.selector.startsWith('@media') || rule.selector.startsWith('@supports') || - rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) { - content = _this._scopeSelectors(rule.content, scopeSelector, hostSelector); - } - return new CssRule(selector, content); - }); - }; - ShadowCss.prototype._scopeSelector = function (selector, scopeSelector, hostSelector, strict) { - var _this = this; - return selector.split(',') - .map(function (part) { return part.trim().split(_shadowDeepSelectors); }) - .map(function (deepParts) { - var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(deepParts), shallowPart = _a[0], otherParts = _a.slice(1); - var applyScope = function (shallowPart) { - if (_this._selectorNeedsScoping(shallowPart, scopeSelector)) { - return strict ? - _this._applyStrictSelectorScope(shallowPart, scopeSelector, hostSelector) : - _this._applySelectorScope(shallowPart, scopeSelector, hostSelector); - } - else { - return shallowPart; - } - }; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([applyScope(shallowPart)], otherParts).join(' '); - }) - .join(', '); - }; - ShadowCss.prototype._selectorNeedsScoping = function (selector, scopeSelector) { - var re = this._makeScopeMatcher(scopeSelector); - return !re.test(selector); - }; - ShadowCss.prototype._makeScopeMatcher = function (scopeSelector) { - var lre = /\[/g; - var rre = /\]/g; - scopeSelector = scopeSelector.replace(lre, '\\[').replace(rre, '\\]'); - return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm'); - }; - ShadowCss.prototype._applySelectorScope = function (selector, scopeSelector, hostSelector) { - // Difference from webcomponents.js: scopeSelector could not be an array - return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector); - }; - // scope via name and [is=name] - ShadowCss.prototype._applySimpleSelectorScope = function (selector, scopeSelector, hostSelector) { - // In Android browser, the lastIndex is not reset when the regex is used in String.replace() - _polyfillHostRe.lastIndex = 0; - if (_polyfillHostRe.test(selector)) { - var replaceBy_1 = this.strictStyling ? "[" + hostSelector + "]" : scopeSelector; - return selector - .replace(_polyfillHostNoCombinatorRe, function (hnc, selector) { - return selector.replace(/([^:]*)(:*)(.*)/, function (_, before, colon, after) { - return before + replaceBy_1 + colon + after; - }); - }) - .replace(_polyfillHostRe, replaceBy_1 + ' '); - } - return scopeSelector + ' ' + selector; - }; - // return a selector with [name] suffix on each simple selector - // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name] /** @internal */ - ShadowCss.prototype._applyStrictSelectorScope = function (selector, scopeSelector, hostSelector) { - var _this = this; - var isRe = /\[is=([^\]]*)\]/g; - scopeSelector = scopeSelector.replace(isRe, function (_) { - var parts = []; - for (var _i = 1; _i < arguments.length; _i++) { - parts[_i - 1] = arguments[_i]; - } - return parts[0]; - }); - var attrName = '[' + scopeSelector + ']'; - var _scopeSelectorPart = function (p) { - var scopedP = p.trim(); - if (!scopedP) { - return ''; - } - if (p.indexOf(_polyfillHostNoCombinator) > -1) { - scopedP = _this._applySimpleSelectorScope(p, scopeSelector, hostSelector); - } - else { - // remove :host since it should be unnecessary - var t = p.replace(_polyfillHostRe, ''); - if (t.length > 0) { - var matches = t.match(/([^:]*)(:*)(.*)/); - if (matches) { - scopedP = matches[1] + attrName + matches[2] + matches[3]; - } - } - } - return scopedP; - }; - var safeContent = new SafeSelector(selector); - selector = safeContent.content(); - var scopedSelector = ''; - var startIndex = 0; - var res; - var sep = /( |>|\+|~(?!=))\s*/g; - // If a selector appears before :host it should not be shimmed as it - // matches on ancestor elements and not on elements in the host's shadow - // `:host-context(div)` is transformed to - // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator` - // the `div` is not part of the component in the 2nd selectors and should not be scoped. - // Historically `component-tag:host` was matching the component so we also want to preserve - // this behavior to avoid breaking legacy apps (it should not match). - // The behavior should be: - // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything) - // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a - // `:host-context(tag)`) - var hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1; - // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present - var shouldScope = !hasHost; - while ((res = sep.exec(selector)) !== null) { - var separator = res[1]; - var part_1 = selector.slice(startIndex, res.index).trim(); - shouldScope = shouldScope || part_1.indexOf(_polyfillHostNoCombinator) > -1; - var scopedPart = shouldScope ? _scopeSelectorPart(part_1) : part_1; - scopedSelector += scopedPart + " " + separator + " "; - startIndex = sep.lastIndex; - } - var part = selector.substring(startIndex); - shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1; - scopedSelector += shouldScope ? _scopeSelectorPart(part) : part; - // replace the placeholders with their original values - return safeContent.restore(scopedSelector); - }; - ShadowCss.prototype._insertPolyfillHostInCssText = function (selector) { - return selector.replace(_colonHostContextRe, _polyfillHostContext) - .replace(_colonHostRe, _polyfillHost); - }; - return ShadowCss; -}()); -var SafeSelector = /** @class */ (function () { - function SafeSelector(selector) { - var _this = this; - this.placeholders = []; - this.index = 0; - // Replaces attribute selectors with placeholders. - // The WS in [attr="va lue"] would otherwise be interpreted as a selector separator. - selector = selector.replace(/(\[[^\]]*\])/g, function (_, keep) { - var replaceBy = "__ph-" + _this.index + "__"; - _this.placeholders.push(keep); - _this.index++; - return replaceBy; - }); - // Replaces the expression in `:nth-child(2n + 1)` with a placeholder. - // WS and "+" would otherwise be interpreted as selector separators. - this._content = selector.replace(/(:nth-[-\w]+)(\([^)]+\))/g, function (_, pseudo, exp) { - var replaceBy = "__ph-" + _this.index + "__"; - _this.placeholders.push(exp); - _this.index++; - return pseudo + replaceBy; - }); - } - SafeSelector.prototype.restore = function (content) { - var _this = this; - return content.replace(/__ph-(\d+)__/g, function (ph, index) { return _this.placeholders[+index]; }); - }; - SafeSelector.prototype.content = function () { return this._content; }; - return SafeSelector; -}()); -var _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim; -var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim; -var _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim; -var _polyfillHost = '-shadowcsshost'; -// note: :host-context pre-processed to -shadowcsshostcontext. -var _polyfillHostContext = '-shadowcsscontext'; -var _parenSuffix = ')(?:\\((' + - '(?:\\([^)(]*\\)|[^)(]*)+?' + - ')\\))?([^,{]*)'; -var _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim'); -var _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim'); -var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator'; -var _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/; -var _shadowDOMSelectorsRe = [ - /::shadow/g, - /::content/g, - // Deprecated selectors - /\/shadow-deep\//g, - /\/shadow\//g, -]; -// The deep combinator is deprecated in the CSS spec -// Support for `>>>`, `deep`, `::ng-deep` is then also deprecated and will be removed in the future. -// see https://github.com/angular/angular/pull/17677 -var _shadowDeepSelectors = /(?:>>>)|(?:\/deep\/)|(?:::ng-deep)/g; -var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$'; -var _polyfillHostRe = /-shadowcsshost/gim; -var _colonHostRe = /:host/gim; -var _colonHostContextRe = /:host-context/gim; -var _commentRe = /\/\*\s*[\s\S]*?\*\//g; -function stripComments(input) { - return input.replace(_commentRe, ''); -} -var _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g; -function extractCommentsWithHash(input) { - return input.match(_commentWithHashRe) || []; -} -var _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g; -var _curlyRe = /([{}])/g; -var OPEN_CURLY = '{'; -var CLOSE_CURLY = '}'; -var BLOCK_PLACEHOLDER = '%BLOCK%'; -var CssRule = /** @class */ (function () { - function CssRule(selector, content) { - this.selector = selector; - this.content = content; - } - return CssRule; -}()); -function processRules(input, ruleCallback) { - var inputWithEscapedBlocks = escapeBlocks(input); - var nextBlockIndex = 0; - return inputWithEscapedBlocks.escapedString.replace(_ruleRe, function () { - var m = []; - for (var _i = 0; _i < arguments.length; _i++) { - m[_i] = arguments[_i]; - } - var selector = m[2]; - var content = ''; - var suffix = m[4]; - var contentPrefix = ''; - if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) { - content = inputWithEscapedBlocks.blocks[nextBlockIndex++]; - suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1); - contentPrefix = '{'; - } - var rule = ruleCallback(new CssRule(selector, content)); - return "" + m[1] + rule.selector + m[3] + contentPrefix + rule.content + suffix; - }); -} -var StringWithEscapedBlocks = /** @class */ (function () { - function StringWithEscapedBlocks(escapedString, blocks) { - this.escapedString = escapedString; - this.blocks = blocks; - } - return StringWithEscapedBlocks; -}()); -function escapeBlocks(input) { - var inputParts = input.split(_curlyRe); - var resultParts = []; - var escapedBlocks = []; - var bracketCount = 0; - var currentBlockParts = []; - for (var partIndex = 0; partIndex < inputParts.length; partIndex++) { - var part = inputParts[partIndex]; - if (part == CLOSE_CURLY) { - bracketCount--; - } - if (bracketCount > 0) { - currentBlockParts.push(part); - } - else { - if (currentBlockParts.length > 0) { - escapedBlocks.push(currentBlockParts.join('')); - resultParts.push(BLOCK_PLACEHOLDER); - currentBlockParts = []; - } - resultParts.push(part); - } - if (part == OPEN_CURLY) { - bracketCount++; - } - } - if (currentBlockParts.length > 0) { - escapedBlocks.push(currentBlockParts.join('')); - resultParts.push(BLOCK_PLACEHOLDER); - } - return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var COMPONENT_VARIABLE = '%COMP%'; -var HOST_ATTR = "_nghost-" + COMPONENT_VARIABLE; -var CONTENT_ATTR = "_ngcontent-" + COMPONENT_VARIABLE; -var StylesCompileDependency = /** @class */ (function () { - function StylesCompileDependency(name, moduleUrl, setValue) { - this.name = name; - this.moduleUrl = moduleUrl; - this.setValue = setValue; - } - return StylesCompileDependency; -}()); -var CompiledStylesheet = /** @class */ (function () { - function CompiledStylesheet(outputCtx, stylesVar, dependencies, isShimmed, meta) { - this.outputCtx = outputCtx; - this.stylesVar = stylesVar; - this.dependencies = dependencies; - this.isShimmed = isShimmed; - this.meta = meta; - } - return CompiledStylesheet; -}()); -var StyleCompiler = /** @class */ (function () { - function StyleCompiler(_urlResolver) { - this._urlResolver = _urlResolver; - this._shadowCss = new ShadowCss(); - } - StyleCompiler.prototype.compileComponent = function (outputCtx, comp) { - var template = comp.template; - return this._compileStyles(outputCtx, comp, new CompileStylesheetMetadata({ - styles: template.styles, - styleUrls: template.styleUrls, - moduleUrl: identifierModuleUrl(comp.type) - }), this.needsStyleShim(comp), true); - }; - StyleCompiler.prototype.compileStyles = function (outputCtx, comp, stylesheet, shim) { - if (shim === void 0) { shim = this.needsStyleShim(comp); } - return this._compileStyles(outputCtx, comp, stylesheet, shim, false); - }; - StyleCompiler.prototype.needsStyleShim = function (comp) { - return comp.template.encapsulation === ViewEncapsulation.Emulated; - }; - StyleCompiler.prototype._compileStyles = function (outputCtx, comp, stylesheet, shim, isComponentStylesheet) { - var _this = this; - var styleExpressions = stylesheet.styles.map(function (plainStyle) { return literal(_this._shimIfNeeded(plainStyle, shim)); }); - var dependencies = []; - stylesheet.styleUrls.forEach(function (styleUrl) { - var exprIndex = styleExpressions.length; - // Note: This placeholder will be filled later. - styleExpressions.push(null); - dependencies.push(new StylesCompileDependency(getStylesVarName(null), styleUrl, function (value) { return styleExpressions[exprIndex] = outputCtx.importExpr(value); })); - }); - // styles variable contains plain strings and arrays of other styles arrays (recursive), - // so we set its type to dynamic. - var stylesVar = getStylesVarName(isComponentStylesheet ? comp : null); - var stmt = variable(stylesVar) - .set(literalArr(styleExpressions, new ArrayType(DYNAMIC_TYPE, [TypeModifier.Const]))) - .toDeclStmt(null, isComponentStylesheet ? [StmtModifier.Final] : [ - StmtModifier.Final, StmtModifier.Exported - ]); - outputCtx.statements.push(stmt); - return new CompiledStylesheet(outputCtx, stylesVar, dependencies, shim, stylesheet); - }; - StyleCompiler.prototype._shimIfNeeded = function (style, shim) { - return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style; - }; - return StyleCompiler; -}()); -function getStylesVarName(component) { - var result = "styles"; - if (component) { - result += "_" + identifierName(component.type); - } - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var TokenType; -(function (TokenType) { - TokenType[TokenType["Character"] = 0] = "Character"; - TokenType[TokenType["Identifier"] = 1] = "Identifier"; - TokenType[TokenType["Keyword"] = 2] = "Keyword"; - TokenType[TokenType["String"] = 3] = "String"; - TokenType[TokenType["Operator"] = 4] = "Operator"; - TokenType[TokenType["Number"] = 5] = "Number"; - TokenType[TokenType["Error"] = 6] = "Error"; -})(TokenType || (TokenType = {})); -var KEYWORDS = ['var', 'let', 'as', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this']; -var Lexer = /** @class */ (function () { - function Lexer() { - } - Lexer.prototype.tokenize = function (text) { - var scanner = new _Scanner(text); - var tokens = []; - var token = scanner.scanToken(); - while (token != null) { - tokens.push(token); - token = scanner.scanToken(); - } - return tokens; - }; - return Lexer; -}()); -var Token = /** @class */ (function () { - function Token(index, type, numValue, strValue) { - this.index = index; - this.type = type; - this.numValue = numValue; - this.strValue = strValue; - } - Token.prototype.isCharacter = function (code) { - return this.type == TokenType.Character && this.numValue == code; - }; - Token.prototype.isNumber = function () { return this.type == TokenType.Number; }; - Token.prototype.isString = function () { return this.type == TokenType.String; }; - Token.prototype.isOperator = function (operator) { - return this.type == TokenType.Operator && this.strValue == operator; - }; - Token.prototype.isIdentifier = function () { return this.type == TokenType.Identifier; }; - Token.prototype.isKeyword = function () { return this.type == TokenType.Keyword; }; - Token.prototype.isKeywordLet = function () { return this.type == TokenType.Keyword && this.strValue == 'let'; }; - Token.prototype.isKeywordAs = function () { return this.type == TokenType.Keyword && this.strValue == 'as'; }; - Token.prototype.isKeywordNull = function () { return this.type == TokenType.Keyword && this.strValue == 'null'; }; - Token.prototype.isKeywordUndefined = function () { - return this.type == TokenType.Keyword && this.strValue == 'undefined'; - }; - Token.prototype.isKeywordTrue = function () { return this.type == TokenType.Keyword && this.strValue == 'true'; }; - Token.prototype.isKeywordFalse = function () { return this.type == TokenType.Keyword && this.strValue == 'false'; }; - Token.prototype.isKeywordThis = function () { return this.type == TokenType.Keyword && this.strValue == 'this'; }; - Token.prototype.isError = function () { return this.type == TokenType.Error; }; - Token.prototype.toNumber = function () { return this.type == TokenType.Number ? this.numValue : -1; }; - Token.prototype.toString = function () { - switch (this.type) { - case TokenType.Character: - case TokenType.Identifier: - case TokenType.Keyword: - case TokenType.Operator: - case TokenType.String: - case TokenType.Error: - return this.strValue; - case TokenType.Number: - return this.numValue.toString(); - default: - return null; - } - }; - return Token; -}()); -function newCharacterToken(index, code) { - return new Token(index, TokenType.Character, code, String.fromCharCode(code)); -} -function newIdentifierToken(index, text) { - return new Token(index, TokenType.Identifier, 0, text); -} -function newKeywordToken(index, text) { - return new Token(index, TokenType.Keyword, 0, text); -} -function newOperatorToken(index, text) { - return new Token(index, TokenType.Operator, 0, text); -} -function newStringToken(index, text) { - return new Token(index, TokenType.String, 0, text); -} -function newNumberToken(index, n) { - return new Token(index, TokenType.Number, n, ''); -} -function newErrorToken(index, message) { - return new Token(index, TokenType.Error, 0, message); -} -var EOF = new Token(-1, TokenType.Character, 0, ''); -var _Scanner = /** @class */ (function () { - function _Scanner(input) { - this.input = input; - this.peek = 0; - this.index = -1; - this.length = input.length; - this.advance(); - } - _Scanner.prototype.advance = function () { - this.peek = ++this.index >= this.length ? $EOF : this.input.charCodeAt(this.index); - }; - _Scanner.prototype.scanToken = function () { - var input = this.input, length = this.length; - var peek = this.peek, index = this.index; - // Skip whitespace. - while (peek <= $SPACE) { - if (++index >= length) { - peek = $EOF; - break; - } - else { - peek = input.charCodeAt(index); - } - } - this.peek = peek; - this.index = index; - if (index >= length) { - return null; - } - // Handle identifiers and numbers. - if (isIdentifierStart(peek)) - return this.scanIdentifier(); - if (isDigit(peek)) - return this.scanNumber(index); - var start = index; - switch (peek) { - case $PERIOD: - this.advance(); - return isDigit(this.peek) ? this.scanNumber(start) : - newCharacterToken(start, $PERIOD); - case $LPAREN: - case $RPAREN: - case $LBRACE: - case $RBRACE: - case $LBRACKET: - case $RBRACKET: - case $COMMA: - case $COLON: - case $SEMICOLON: - return this.scanCharacter(start, peek); - case $SQ: - case $DQ: - return this.scanString(); - case $HASH: - case $PLUS: - case $MINUS: - case $STAR: - case $SLASH: - case $PERCENT: - case $CARET: - return this.scanOperator(start, String.fromCharCode(peek)); - case $QUESTION: - return this.scanComplexOperator(start, '?', $PERIOD, '.'); - case $LT: - case $GT: - return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '='); - case $BANG: - case $EQ: - return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=', $EQ, '='); - case $AMPERSAND: - return this.scanComplexOperator(start, '&', $AMPERSAND, '&'); - case $BAR: - return this.scanComplexOperator(start, '|', $BAR, '|'); - case $NBSP: - while (isWhitespace(this.peek)) - this.advance(); - return this.scanToken(); - } - this.advance(); - return this.error("Unexpected character [" + String.fromCharCode(peek) + "]", 0); - }; - _Scanner.prototype.scanCharacter = function (start, code) { - this.advance(); - return newCharacterToken(start, code); - }; - _Scanner.prototype.scanOperator = function (start, str) { - this.advance(); - return newOperatorToken(start, str); - }; - /** - * Tokenize a 2/3 char long operator - * - * @param start start index in the expression - * @param one first symbol (always part of the operator) - * @param twoCode code point for the second symbol - * @param two second symbol (part of the operator when the second code point matches) - * @param threeCode code point for the third symbol - * @param three third symbol (part of the operator when provided and matches source expression) - */ - _Scanner.prototype.scanComplexOperator = function (start, one, twoCode, two, threeCode, three) { - this.advance(); - var str = one; - if (this.peek == twoCode) { - this.advance(); - str += two; - } - if (threeCode != null && this.peek == threeCode) { - this.advance(); - str += three; - } - return newOperatorToken(start, str); - }; - _Scanner.prototype.scanIdentifier = function () { - var start = this.index; - this.advance(); - while (isIdentifierPart(this.peek)) - this.advance(); - var str = this.input.substring(start, this.index); - return KEYWORDS.indexOf(str) > -1 ? newKeywordToken(start, str) : - newIdentifierToken(start, str); - }; - _Scanner.prototype.scanNumber = function (start) { - var simple = (this.index === start); - this.advance(); // Skip initial digit. - while (true) { - if (isDigit(this.peek)) ; - else if (this.peek == $PERIOD) { - simple = false; - } - else if (isExponentStart(this.peek)) { - this.advance(); - if (isExponentSign(this.peek)) - this.advance(); - if (!isDigit(this.peek)) - return this.error('Invalid exponent', -1); - simple = false; - } - else { - break; - } - this.advance(); - } - var str = this.input.substring(start, this.index); - var value = simple ? parseIntAutoRadix(str) : parseFloat(str); - return newNumberToken(start, value); - }; - _Scanner.prototype.scanString = function () { - var start = this.index; - var quote = this.peek; - this.advance(); // Skip initial quote. - var buffer = ''; - var marker = this.index; - var input = this.input; - while (this.peek != quote) { - if (this.peek == $BACKSLASH) { - buffer += input.substring(marker, this.index); - this.advance(); - var unescapedCode = void 0; - // Workaround for TS2.1-introduced type strictness - this.peek = this.peek; - if (this.peek == $u) { - // 4 character hex code for unicode character. - var hex = input.substring(this.index + 1, this.index + 5); - if (/^[0-9a-f]+$/i.test(hex)) { - unescapedCode = parseInt(hex, 16); - } - else { - return this.error("Invalid unicode escape [\\u" + hex + "]", 0); - } - for (var i = 0; i < 5; i++) { - this.advance(); - } - } - else { - unescapedCode = unescape(this.peek); - this.advance(); - } - buffer += String.fromCharCode(unescapedCode); - marker = this.index; - } - else if (this.peek == $EOF) { - return this.error('Unterminated quote', 0); - } - else { - this.advance(); - } - } - var last = input.substring(marker, this.index); - this.advance(); // Skip terminating quote. - return newStringToken(start, buffer + last); - }; - _Scanner.prototype.error = function (message, offset) { - var position = this.index + offset; - return newErrorToken(position, "Lexer Error: " + message + " at column " + position + " in expression [" + this.input + "]"); - }; - return _Scanner; -}()); -function isIdentifierStart(code) { - return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || - (code == $_) || (code == $$); -} -function isIdentifier(input) { - if (input.length == 0) - return false; - var scanner = new _Scanner(input); - if (!isIdentifierStart(scanner.peek)) - return false; - scanner.advance(); - while (scanner.peek !== $EOF) { - if (!isIdentifierPart(scanner.peek)) - return false; - scanner.advance(); - } - return true; -} -function isIdentifierPart(code) { - return isAsciiLetter(code) || isDigit(code) || (code == $_) || - (code == $$); -} -function isExponentStart(code) { - return code == $e || code == $E; -} -function isExponentSign(code) { - return code == $MINUS || code == $PLUS; -} -function isQuote(code) { - return code === $SQ || code === $DQ || code === $BT; -} -function unescape(code) { - switch (code) { - case $n: - return $LF; - case $f: - return $FF; - case $r: - return $CR; - case $t: - return $TAB; - case $v: - return $VTAB; - default: - return code; - } -} -function parseIntAutoRadix(text) { - var result = parseInt(text); - if (isNaN(result)) { - throw new Error('Invalid integer literal when parsing ' + text); - } - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function assertArrayOfStrings(identifier, value) { - if (value == null) { - return; - } - if (!Array.isArray(value)) { - throw new Error("Expected '" + identifier + "' to be an array of strings."); - } - for (var i = 0; i < value.length; i += 1) { - if (typeof value[i] !== 'string') { - throw new Error("Expected '" + identifier + "' to be an array of strings."); - } - } -} -var INTERPOLATION_BLACKLIST_REGEXPS = [ - /^\s*$/, - /[<>]/, - /^[{}]$/, - /&(#|[a-z])/i, - /^\/\//, -]; -function assertInterpolationSymbols(identifier, value) { - if (value != null && !(Array.isArray(value) && value.length == 2)) { - throw new Error("Expected '" + identifier + "' to be an array, [start, end]."); - } - else if (value != null) { - var start_1 = value[0]; - var end_1 = value[1]; - // black list checking - INTERPOLATION_BLACKLIST_REGEXPS.forEach(function (regexp) { - if (regexp.test(start_1) || regexp.test(end_1)) { - throw new Error("['" + start_1 + "', '" + end_1 + "'] contains unusable interpolation symbol."); - } - }); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var InterpolationConfig = /** @class */ (function () { - function InterpolationConfig(start, end) { - this.start = start; - this.end = end; - } - InterpolationConfig.fromArray = function (markers) { - if (!markers) { - return DEFAULT_INTERPOLATION_CONFIG; - } - assertInterpolationSymbols('interpolation', markers); - return new InterpolationConfig(markers[0], markers[1]); - }; - return InterpolationConfig; -}()); -var DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}'); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var SplitInterpolation = /** @class */ (function () { - function SplitInterpolation(strings, expressions, offsets) { - this.strings = strings; - this.expressions = expressions; - this.offsets = offsets; - } - return SplitInterpolation; -}()); -var TemplateBindingParseResult = /** @class */ (function () { - function TemplateBindingParseResult(templateBindings, warnings, errors) { - this.templateBindings = templateBindings; - this.warnings = warnings; - this.errors = errors; - } - return TemplateBindingParseResult; -}()); -function _createInterpolateRegExp(config) { - var pattern = escapeRegExp(config.start) + '([\\s\\S]*?)' + escapeRegExp(config.end); - return new RegExp(pattern, 'g'); -} -var Parser = /** @class */ (function () { - function Parser(_lexer) { - this._lexer = _lexer; - this.errors = []; - } - Parser.prototype.parseAction = function (input, location, interpolationConfig) { - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - this._checkNoInterpolation(input, location, interpolationConfig); - var sourceToLex = this._stripComments(input); - var tokens = this._lexer.tokenize(this._stripComments(input)); - var ast = new _ParseAST(input, location, tokens, sourceToLex.length, true, this.errors, input.length - sourceToLex.length) - .parseChain(); - return new ASTWithSource(ast, input, location, this.errors); - }; - Parser.prototype.parseBinding = function (input, location, interpolationConfig) { - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - var ast = this._parseBindingAst(input, location, interpolationConfig); - return new ASTWithSource(ast, input, location, this.errors); - }; - Parser.prototype.parseSimpleBinding = function (input, location, interpolationConfig) { - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - var ast = this._parseBindingAst(input, location, interpolationConfig); - var errors = SimpleExpressionChecker.check(ast); - if (errors.length > 0) { - this._reportError("Host binding expression cannot contain " + errors.join(' '), input, location); - } - return new ASTWithSource(ast, input, location, this.errors); - }; - Parser.prototype._reportError = function (message, input, errLocation, ctxLocation) { - this.errors.push(new ParserError(message, input, errLocation, ctxLocation)); - }; - Parser.prototype._parseBindingAst = function (input, location, interpolationConfig) { - // Quotes expressions use 3rd-party expression language. We don't want to use - // our lexer or parser for that, so we check for that ahead of time. - var quote = this._parseQuote(input, location); - if (quote != null) { - return quote; - } - this._checkNoInterpolation(input, location, interpolationConfig); - var sourceToLex = this._stripComments(input); - var tokens = this._lexer.tokenize(sourceToLex); - return new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, input.length - sourceToLex.length) - .parseChain(); - }; - Parser.prototype._parseQuote = function (input, location) { - if (input == null) - return null; - var prefixSeparatorIndex = input.indexOf(':'); - if (prefixSeparatorIndex == -1) - return null; - var prefix = input.substring(0, prefixSeparatorIndex).trim(); - if (!isIdentifier(prefix)) - return null; - var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1); - return new Quote(new ParseSpan(0, input.length), prefix, uninterpretedExpression, location); - }; - Parser.prototype.parseTemplateBindings = function (tplKey, tplValue, location) { - var tokens = this._lexer.tokenize(tplValue); - return new _ParseAST(tplValue, location, tokens, tplValue.length, false, this.errors, 0) - .parseTemplateBindings(tplKey); - }; - Parser.prototype.parseInterpolation = function (input, location, interpolationConfig) { - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - var split = this.splitInterpolation(input, location, interpolationConfig); - if (split == null) - return null; - var expressions = []; - for (var i = 0; i < split.expressions.length; ++i) { - var expressionText = split.expressions[i]; - var sourceToLex = this._stripComments(expressionText); - var tokens = this._lexer.tokenize(sourceToLex); - var ast = new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, split.offsets[i] + (expressionText.length - sourceToLex.length)) - .parseChain(); - expressions.push(ast); - } - return new ASTWithSource(new Interpolation(new ParseSpan(0, input == null ? 0 : input.length), split.strings, expressions), input, location, this.errors); - }; - Parser.prototype.splitInterpolation = function (input, location, interpolationConfig) { - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - var regexp = _createInterpolateRegExp(interpolationConfig); - var parts = input.split(regexp); - if (parts.length <= 1) { - return null; - } - var strings = []; - var expressions = []; - var offsets = []; - var offset = 0; - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - if (i % 2 === 0) { - // fixed string - strings.push(part); - offset += part.length; - } - else if (part.trim().length > 0) { - offset += interpolationConfig.start.length; - expressions.push(part); - offsets.push(offset); - offset += part.length + interpolationConfig.end.length; - } - else { - this._reportError('Blank expressions are not allowed in interpolated strings', input, "at column " + this._findInterpolationErrorColumn(parts, i, interpolationConfig) + " in", location); - expressions.push('$implict'); - offsets.push(offset); - } - } - return new SplitInterpolation(strings, expressions, offsets); - }; - Parser.prototype.wrapLiteralPrimitive = function (input, location) { - return new ASTWithSource(new LiteralPrimitive(new ParseSpan(0, input == null ? 0 : input.length), input), input, location, this.errors); - }; - Parser.prototype._stripComments = function (input) { - var i = this._commentStart(input); - return i != null ? input.substring(0, i).trim() : input; - }; - Parser.prototype._commentStart = function (input) { - var outerQuote = null; - for (var i = 0; i < input.length - 1; i++) { - var char = input.charCodeAt(i); - var nextChar = input.charCodeAt(i + 1); - if (char === $SLASH && nextChar == $SLASH && outerQuote == null) - return i; - if (outerQuote === char) { - outerQuote = null; - } - else if (outerQuote == null && isQuote(char)) { - outerQuote = char; - } - } - return null; - }; - Parser.prototype._checkNoInterpolation = function (input, location, interpolationConfig) { - var regexp = _createInterpolateRegExp(interpolationConfig); - var parts = input.split(regexp); - if (parts.length > 1) { - this._reportError("Got interpolation (" + interpolationConfig.start + interpolationConfig.end + ") where expression was expected", input, "at column " + this._findInterpolationErrorColumn(parts, 1, interpolationConfig) + " in", location); - } - }; - Parser.prototype._findInterpolationErrorColumn = function (parts, partInErrIdx, interpolationConfig) { - var errLocation = ''; - for (var j = 0; j < partInErrIdx; j++) { - errLocation += j % 2 === 0 ? - parts[j] : - "" + interpolationConfig.start + parts[j] + interpolationConfig.end; - } - return errLocation.length; - }; - return Parser; -}()); -var _ParseAST = /** @class */ (function () { - function _ParseAST(input, location, tokens, inputLength, parseAction, errors, offset) { - this.input = input; - this.location = location; - this.tokens = tokens; - this.inputLength = inputLength; - this.parseAction = parseAction; - this.errors = errors; - this.offset = offset; - this.rparensExpected = 0; - this.rbracketsExpected = 0; - this.rbracesExpected = 0; - this.index = 0; - } - _ParseAST.prototype.peek = function (offset) { - var i = this.index + offset; - return i < this.tokens.length ? this.tokens[i] : EOF; - }; - Object.defineProperty(_ParseAST.prototype, "next", { - get: function () { return this.peek(0); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(_ParseAST.prototype, "inputIndex", { - get: function () { - return (this.index < this.tokens.length) ? this.next.index + this.offset : - this.inputLength + this.offset; - }, - enumerable: true, - configurable: true - }); - _ParseAST.prototype.span = function (start) { return new ParseSpan(start, this.inputIndex); }; - _ParseAST.prototype.advance = function () { this.index++; }; - _ParseAST.prototype.optionalCharacter = function (code) { - if (this.next.isCharacter(code)) { - this.advance(); - return true; - } - else { - return false; - } - }; - _ParseAST.prototype.peekKeywordLet = function () { return this.next.isKeywordLet(); }; - _ParseAST.prototype.peekKeywordAs = function () { return this.next.isKeywordAs(); }; - _ParseAST.prototype.expectCharacter = function (code) { - if (this.optionalCharacter(code)) - return; - this.error("Missing expected " + String.fromCharCode(code)); - }; - _ParseAST.prototype.optionalOperator = function (op) { - if (this.next.isOperator(op)) { - this.advance(); - return true; - } - else { - return false; - } - }; - _ParseAST.prototype.expectOperator = function (operator) { - if (this.optionalOperator(operator)) - return; - this.error("Missing expected operator " + operator); - }; - _ParseAST.prototype.expectIdentifierOrKeyword = function () { - var n = this.next; - if (!n.isIdentifier() && !n.isKeyword()) { - this.error("Unexpected token " + n + ", expected identifier or keyword"); - return ''; - } - this.advance(); - return n.toString(); - }; - _ParseAST.prototype.expectIdentifierOrKeywordOrString = function () { - var n = this.next; - if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) { - this.error("Unexpected token " + n + ", expected identifier, keyword, or string"); - return ''; - } - this.advance(); - return n.toString(); - }; - _ParseAST.prototype.parseChain = function () { - var exprs = []; - var start = this.inputIndex; - while (this.index < this.tokens.length) { - var expr = this.parsePipe(); - exprs.push(expr); - if (this.optionalCharacter($SEMICOLON)) { - if (!this.parseAction) { - this.error('Binding expression cannot contain chained expression'); - } - while (this.optionalCharacter($SEMICOLON)) { - } // read all semicolons - } - else if (this.index < this.tokens.length) { - this.error("Unexpected token '" + this.next + "'"); - } - } - if (exprs.length == 0) - return new EmptyExpr(this.span(start)); - if (exprs.length == 1) - return exprs[0]; - return new Chain(this.span(start), exprs); - }; - _ParseAST.prototype.parsePipe = function () { - var result = this.parseExpression(); - if (this.optionalOperator('|')) { - if (this.parseAction) { - this.error('Cannot have a pipe in an action expression'); - } - do { - var name_1 = this.expectIdentifierOrKeyword(); - var args = []; - while (this.optionalCharacter($COLON)) { - args.push(this.parseExpression()); - } - result = new BindingPipe(this.span(result.span.start), result, name_1, args); - } while (this.optionalOperator('|')); - } - return result; - }; - _ParseAST.prototype.parseExpression = function () { return this.parseConditional(); }; - _ParseAST.prototype.parseConditional = function () { - var start = this.inputIndex; - var result = this.parseLogicalOr(); - if (this.optionalOperator('?')) { - var yes = this.parsePipe(); - var no = void 0; - if (!this.optionalCharacter($COLON)) { - var end = this.inputIndex; - var expression = this.input.substring(start, end); - this.error("Conditional expression " + expression + " requires all 3 expressions"); - no = new EmptyExpr(this.span(start)); - } - else { - no = this.parsePipe(); - } - return new Conditional(this.span(start), result, yes, no); - } - else { - return result; - } - }; - _ParseAST.prototype.parseLogicalOr = function () { - // '||' - var result = this.parseLogicalAnd(); - while (this.optionalOperator('||')) { - var right = this.parseLogicalAnd(); - result = new Binary(this.span(result.span.start), '||', result, right); - } - return result; - }; - _ParseAST.prototype.parseLogicalAnd = function () { - // '&&' - var result = this.parseEquality(); - while (this.optionalOperator('&&')) { - var right = this.parseEquality(); - result = new Binary(this.span(result.span.start), '&&', result, right); - } - return result; - }; - _ParseAST.prototype.parseEquality = function () { - // '==','!=','===','!==' - var result = this.parseRelational(); - while (this.next.type == TokenType.Operator) { - var operator = this.next.strValue; - switch (operator) { - case '==': - case '===': - case '!=': - case '!==': - this.advance(); - var right = this.parseRelational(); - result = new Binary(this.span(result.span.start), operator, result, right); - continue; - } - break; - } - return result; - }; - _ParseAST.prototype.parseRelational = function () { - // '<', '>', '<=', '>=' - var result = this.parseAdditive(); - while (this.next.type == TokenType.Operator) { - var operator = this.next.strValue; - switch (operator) { - case '<': - case '>': - case '<=': - case '>=': - this.advance(); - var right = this.parseAdditive(); - result = new Binary(this.span(result.span.start), operator, result, right); - continue; - } - break; - } - return result; - }; - _ParseAST.prototype.parseAdditive = function () { - // '+', '-' - var result = this.parseMultiplicative(); - while (this.next.type == TokenType.Operator) { - var operator = this.next.strValue; - switch (operator) { - case '+': - case '-': - this.advance(); - var right = this.parseMultiplicative(); - result = new Binary(this.span(result.span.start), operator, result, right); - continue; - } - break; - } - return result; - }; - _ParseAST.prototype.parseMultiplicative = function () { - // '*', '%', '/' - var result = this.parsePrefix(); - while (this.next.type == TokenType.Operator) { - var operator = this.next.strValue; - switch (operator) { - case '*': - case '%': - case '/': - this.advance(); - var right = this.parsePrefix(); - result = new Binary(this.span(result.span.start), operator, result, right); - continue; - } - break; - } - return result; - }; - _ParseAST.prototype.parsePrefix = function () { - if (this.next.type == TokenType.Operator) { - var start = this.inputIndex; - var operator = this.next.strValue; - var result = void 0; - switch (operator) { - case '+': - this.advance(); - result = this.parsePrefix(); - return new Binary(this.span(start), '-', result, new LiteralPrimitive(new ParseSpan(start, start), 0)); - case '-': - this.advance(); - result = this.parsePrefix(); - return new Binary(this.span(start), operator, new LiteralPrimitive(new ParseSpan(start, start), 0), result); - case '!': - this.advance(); - result = this.parsePrefix(); - return new PrefixNot(this.span(start), result); - } - } - return this.parseCallChain(); - }; - _ParseAST.prototype.parseCallChain = function () { - var result = this.parsePrimary(); - while (true) { - if (this.optionalCharacter($PERIOD)) { - result = this.parseAccessMemberOrMethodCall(result, false); - } - else if (this.optionalOperator('?.')) { - result = this.parseAccessMemberOrMethodCall(result, true); - } - else if (this.optionalCharacter($LBRACKET)) { - this.rbracketsExpected++; - var key = this.parsePipe(); - this.rbracketsExpected--; - this.expectCharacter($RBRACKET); - if (this.optionalOperator('=')) { - var value = this.parseConditional(); - result = new KeyedWrite(this.span(result.span.start), result, key, value); - } - else { - result = new KeyedRead(this.span(result.span.start), result, key); - } - } - else if (this.optionalCharacter($LPAREN)) { - this.rparensExpected++; - var args = this.parseCallArguments(); - this.rparensExpected--; - this.expectCharacter($RPAREN); - result = new FunctionCall(this.span(result.span.start), result, args); - } - else if (this.optionalOperator('!')) { - result = new NonNullAssert(this.span(result.span.start), result); - } - else { - return result; - } - } - }; - _ParseAST.prototype.parsePrimary = function () { - var start = this.inputIndex; - if (this.optionalCharacter($LPAREN)) { - this.rparensExpected++; - var result = this.parsePipe(); - this.rparensExpected--; - this.expectCharacter($RPAREN); - return result; - } - else if (this.next.isKeywordNull()) { - this.advance(); - return new LiteralPrimitive(this.span(start), null); - } - else if (this.next.isKeywordUndefined()) { - this.advance(); - return new LiteralPrimitive(this.span(start), void 0); - } - else if (this.next.isKeywordTrue()) { - this.advance(); - return new LiteralPrimitive(this.span(start), true); - } - else if (this.next.isKeywordFalse()) { - this.advance(); - return new LiteralPrimitive(this.span(start), false); - } - else if (this.next.isKeywordThis()) { - this.advance(); - return new ImplicitReceiver(this.span(start)); - } - else if (this.optionalCharacter($LBRACKET)) { - this.rbracketsExpected++; - var elements = this.parseExpressionList($RBRACKET); - this.rbracketsExpected--; - this.expectCharacter($RBRACKET); - return new LiteralArray(this.span(start), elements); - } - else if (this.next.isCharacter($LBRACE)) { - return this.parseLiteralMap(); - } - else if (this.next.isIdentifier()) { - return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start)), false); - } - else if (this.next.isNumber()) { - var value = this.next.toNumber(); - this.advance(); - return new LiteralPrimitive(this.span(start), value); - } - else if (this.next.isString()) { - var literalValue = this.next.toString(); - this.advance(); - return new LiteralPrimitive(this.span(start), literalValue); - } - else if (this.index >= this.tokens.length) { - this.error("Unexpected end of expression: " + this.input); - return new EmptyExpr(this.span(start)); - } - else { - this.error("Unexpected token " + this.next); - return new EmptyExpr(this.span(start)); - } - }; - _ParseAST.prototype.parseExpressionList = function (terminator) { - var result = []; - if (!this.next.isCharacter(terminator)) { - do { - result.push(this.parsePipe()); - } while (this.optionalCharacter($COMMA)); - } - return result; - }; - _ParseAST.prototype.parseLiteralMap = function () { - var keys = []; - var values = []; - var start = this.inputIndex; - this.expectCharacter($LBRACE); - if (!this.optionalCharacter($RBRACE)) { - this.rbracesExpected++; - do { - var quoted = this.next.isString(); - var key = this.expectIdentifierOrKeywordOrString(); - keys.push({ key: key, quoted: quoted }); - this.expectCharacter($COLON); - values.push(this.parsePipe()); - } while (this.optionalCharacter($COMMA)); - this.rbracesExpected--; - this.expectCharacter($RBRACE); - } - return new LiteralMap(this.span(start), keys, values); - }; - _ParseAST.prototype.parseAccessMemberOrMethodCall = function (receiver, isSafe) { - if (isSafe === void 0) { isSafe = false; } - var start = receiver.span.start; - var id = this.expectIdentifierOrKeyword(); - if (this.optionalCharacter($LPAREN)) { - this.rparensExpected++; - var args = this.parseCallArguments(); - this.expectCharacter($RPAREN); - this.rparensExpected--; - var span = this.span(start); - return isSafe ? new SafeMethodCall(span, receiver, id, args) : - new MethodCall(span, receiver, id, args); - } - else { - if (isSafe) { - if (this.optionalOperator('=')) { - this.error('The \'?.\' operator cannot be used in the assignment'); - return new EmptyExpr(this.span(start)); - } - else { - return new SafePropertyRead(this.span(start), receiver, id); - } - } - else { - if (this.optionalOperator('=')) { - if (!this.parseAction) { - this.error('Bindings cannot contain assignments'); - return new EmptyExpr(this.span(start)); - } - var value = this.parseConditional(); - return new PropertyWrite(this.span(start), receiver, id, value); - } - else { - return new PropertyRead(this.span(start), receiver, id); - } - } - } - }; - _ParseAST.prototype.parseCallArguments = function () { - if (this.next.isCharacter($RPAREN)) - return []; - var positionals = []; - do { - positionals.push(this.parsePipe()); - } while (this.optionalCharacter($COMMA)); - return positionals; - }; - /** - * An identifier, a keyword, a string with an optional `-` in between. - */ - _ParseAST.prototype.expectTemplateBindingKey = function () { - var result = ''; - var operatorFound = false; - do { - result += this.expectIdentifierOrKeywordOrString(); - operatorFound = this.optionalOperator('-'); - if (operatorFound) { - result += '-'; - } - } while (operatorFound); - return result.toString(); - }; - // Parses the AST for `` - _ParseAST.prototype.parseTemplateBindings = function (tplKey) { - var firstBinding = true; - var bindings = []; - var warnings = []; - do { - var start = this.inputIndex; - var rawKey = void 0; - var key = void 0; - var isVar = false; - if (firstBinding) { - rawKey = key = tplKey; - firstBinding = false; - } - else { - isVar = this.peekKeywordLet(); - if (isVar) - this.advance(); - rawKey = this.expectTemplateBindingKey(); - key = isVar ? rawKey : tplKey + rawKey[0].toUpperCase() + rawKey.substring(1); - this.optionalCharacter($COLON); - } - var name_2 = null; - var expression = null; - if (isVar) { - if (this.optionalOperator('=')) { - name_2 = this.expectTemplateBindingKey(); - } - else { - name_2 = '\$implicit'; - } - } - else if (this.peekKeywordAs()) { - this.advance(); // consume `as` - name_2 = rawKey; - key = this.expectTemplateBindingKey(); // read local var name - isVar = true; - } - else if (this.next !== EOF && !this.peekKeywordLet()) { - var start_1 = this.inputIndex; - var ast = this.parsePipe(); - var source = this.input.substring(start_1 - this.offset, this.inputIndex - this.offset); - expression = new ASTWithSource(ast, source, this.location, this.errors); - } - bindings.push(new TemplateBinding(this.span(start), key, isVar, name_2, expression)); - if (this.peekKeywordAs() && !isVar) { - var letStart = this.inputIndex; - this.advance(); // consume `as` - var letName = this.expectTemplateBindingKey(); // read local var name - bindings.push(new TemplateBinding(this.span(letStart), letName, true, key, null)); - } - if (!this.optionalCharacter($SEMICOLON)) { - this.optionalCharacter($COMMA); - } - } while (this.index < this.tokens.length); - return new TemplateBindingParseResult(bindings, warnings, this.errors); - }; - _ParseAST.prototype.error = function (message, index) { - if (index === void 0) { index = null; } - this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location)); - this.skip(); - }; - _ParseAST.prototype.locationText = function (index) { - if (index === void 0) { index = null; } - if (index == null) - index = this.index; - return (index < this.tokens.length) ? "at column " + (this.tokens[index].index + 1) + " in" : - "at the end of the expression"; - }; - // Error recovery should skip tokens until it encounters a recovery point. skip() treats - // the end of input and a ';' as unconditionally a recovery point. It also treats ')', - // '}' and ']' as conditional recovery points if one of calling productions is expecting - // one of these symbols. This allows skip() to recover from errors such as '(a.) + 1' allowing - // more of the AST to be retained (it doesn't skip any tokens as the ')' is retained because - // of the '(' begins an '(' ')' production). The recovery points of grouping symbols - // must be conditional as they must be skipped if none of the calling productions are not - // expecting the closing token else we will never make progress in the case of an - // extraneous group closing symbol (such as a stray ')'). This is not the case for ';' because - // parseChain() is always the root production and it expects a ';'. - // If a production expects one of these token it increments the corresponding nesting count, - // and then decrements it just prior to checking if the token is in the input. - _ParseAST.prototype.skip = function () { - var n = this.next; - while (this.index < this.tokens.length && !n.isCharacter($SEMICOLON) && - (this.rparensExpected <= 0 || !n.isCharacter($RPAREN)) && - (this.rbracesExpected <= 0 || !n.isCharacter($RBRACE)) && - (this.rbracketsExpected <= 0 || !n.isCharacter($RBRACKET))) { - if (this.next.isError()) { - this.errors.push(new ParserError(this.next.toString(), this.input, this.locationText(), this.location)); - } - this.advance(); - n = this.next; - } - }; - return _ParseAST; -}()); -var SimpleExpressionChecker = /** @class */ (function () { - function SimpleExpressionChecker() { - this.errors = []; - } - SimpleExpressionChecker.check = function (ast) { - var s = new SimpleExpressionChecker(); - ast.visit(s); - return s.errors; - }; - SimpleExpressionChecker.prototype.visitImplicitReceiver = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitInterpolation = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitLiteralPrimitive = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitPropertyRead = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitPropertyWrite = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitSafePropertyRead = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitMethodCall = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitSafeMethodCall = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitFunctionCall = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitLiteralArray = function (ast, context) { this.visitAll(ast.expressions); }; - SimpleExpressionChecker.prototype.visitLiteralMap = function (ast, context) { this.visitAll(ast.values); }; - SimpleExpressionChecker.prototype.visitBinary = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitPrefixNot = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitNonNullAssert = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitConditional = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitPipe = function (ast, context) { this.errors.push('pipes'); }; - SimpleExpressionChecker.prototype.visitKeyedRead = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitKeyedWrite = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitAll = function (asts) { - var _this = this; - return asts.map(function (node) { return node.visit(_this); }); - }; - SimpleExpressionChecker.prototype.visitChain = function (ast, context) { }; - SimpleExpressionChecker.prototype.visitQuote = function (ast, context) { }; - return SimpleExpressionChecker; -}()); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * A path is an ordered set of elements. Typically a path is to a - * particular offset in a source file. The head of the list is the top - * most node. The tail is the node that contains the offset directly. - * - * For example, the expression `a + b + c` might have an ast that looks - * like: - * + - * / \ - * a + - * / \ - * b c - * - * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10, - * 'c' at 9-10]` and the path the node at offset 1 would be - * `['+' at 1-10, 'a' at 1-2]`. - */ -var AstPath = /** @class */ (function () { - function AstPath(path, position) { - if (position === void 0) { position = -1; } - this.path = path; - this.position = position; - } - Object.defineProperty(AstPath.prototype, "empty", { - get: function () { return !this.path || !this.path.length; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AstPath.prototype, "head", { - get: function () { return this.path[0]; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AstPath.prototype, "tail", { - get: function () { return this.path[this.path.length - 1]; }, - enumerable: true, - configurable: true - }); - AstPath.prototype.parentOf = function (node) { - return node && this.path[this.path.indexOf(node) - 1]; - }; - AstPath.prototype.childOf = function (node) { return this.path[this.path.indexOf(node) + 1]; }; - AstPath.prototype.first = function (ctor) { - for (var i = this.path.length - 1; i >= 0; i--) { - var item = this.path[i]; - if (item instanceof ctor) - return item; - } - }; - AstPath.prototype.push = function (node) { this.path.push(node); }; - AstPath.prototype.pop = function () { return this.path.pop(); }; - return AstPath; -}()); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Text = /** @class */ (function () { - function Text(value, sourceSpan) { - this.value = value; - this.sourceSpan = sourceSpan; - } - Text.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); }; - return Text; -}()); -var Expansion = /** @class */ (function () { - function Expansion(switchValue, type, cases, sourceSpan, switchValueSourceSpan) { - this.switchValue = switchValue; - this.type = type; - this.cases = cases; - this.sourceSpan = sourceSpan; - this.switchValueSourceSpan = switchValueSourceSpan; - } - Expansion.prototype.visit = function (visitor, context) { return visitor.visitExpansion(this, context); }; - return Expansion; -}()); -var ExpansionCase = /** @class */ (function () { - function ExpansionCase(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) { - this.value = value; - this.expression = expression; - this.sourceSpan = sourceSpan; - this.valueSourceSpan = valueSourceSpan; - this.expSourceSpan = expSourceSpan; - } - ExpansionCase.prototype.visit = function (visitor, context) { return visitor.visitExpansionCase(this, context); }; - return ExpansionCase; -}()); -var Attribute = /** @class */ (function () { - function Attribute(name, value, sourceSpan, valueSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - this.valueSpan = valueSpan; - } - Attribute.prototype.visit = function (visitor, context) { return visitor.visitAttribute(this, context); }; - return Attribute; -}()); -var Element = /** @class */ (function () { - function Element(name, attrs, children, sourceSpan, startSourceSpan, endSourceSpan) { - if (startSourceSpan === void 0) { startSourceSpan = null; } - if (endSourceSpan === void 0) { endSourceSpan = null; } - this.name = name; - this.attrs = attrs; - this.children = children; - this.sourceSpan = sourceSpan; - this.startSourceSpan = startSourceSpan; - this.endSourceSpan = endSourceSpan; - } - Element.prototype.visit = function (visitor, context) { return visitor.visitElement(this, context); }; - return Element; -}()); -var Comment = /** @class */ (function () { - function Comment(value, sourceSpan) { - this.value = value; - this.sourceSpan = sourceSpan; - } - Comment.prototype.visit = function (visitor, context) { return visitor.visitComment(this, context); }; - return Comment; -}()); -function visitAll(visitor, nodes, context) { - if (context === void 0) { context = null; } - var result = []; - var visit = visitor.visit ? - function (ast) { return visitor.visit(ast, context) || ast.visit(visitor, context); } : - function (ast) { return ast.visit(visitor, context); }; - nodes.forEach(function (ast) { - var astResult = visit(ast); - if (astResult) { - result.push(astResult); - } - }); - return result; -} -var RecursiveVisitor = /** @class */ (function () { - function RecursiveVisitor() { - } - RecursiveVisitor.prototype.visitElement = function (ast, context) { - this.visitChildren(context, function (visit) { - visit(ast.attrs); - visit(ast.children); - }); - }; - RecursiveVisitor.prototype.visitAttribute = function (ast, context) { }; - RecursiveVisitor.prototype.visitText = function (ast, context) { }; - RecursiveVisitor.prototype.visitComment = function (ast, context) { }; - RecursiveVisitor.prototype.visitExpansion = function (ast, context) { - return this.visitChildren(context, function (visit) { visit(ast.cases); }); - }; - RecursiveVisitor.prototype.visitExpansionCase = function (ast, context) { }; - RecursiveVisitor.prototype.visitChildren = function (context, cb) { - var results = []; - var t = this; - function visit(children) { - if (children) - results.push(visitAll(t, children, context)); - } - cb(visit); - return [].concat.apply([], results); - }; - return RecursiveVisitor; -}()); -function spanOf(ast) { - var start = ast.sourceSpan.start.offset; - var end = ast.sourceSpan.end.offset; - if (ast instanceof Element) { - if (ast.endSourceSpan) { - end = ast.endSourceSpan.end.offset; - } - else if (ast.children && ast.children.length) { - end = spanOf(ast.children[ast.children.length - 1]).end; - } - } - return { start: start, end: end }; -} -function findNode(nodes, position) { - var path = []; - var visitor = new /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(class_1, _super); - function class_1() { - return _super !== null && _super.apply(this, arguments) || this; - } - class_1.prototype.visit = function (ast, context) { - var span = spanOf(ast); - if (span.start <= position && position < span.end) { - path.push(ast); - } - else { - // Returning a value here will result in the children being skipped. - return true; - } - }; - return class_1; - }(RecursiveVisitor)); - visitAll(visitor, nodes); - return new AstPath(path, position); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var TokenType$1; -(function (TokenType) { - TokenType[TokenType["TAG_OPEN_START"] = 0] = "TAG_OPEN_START"; - TokenType[TokenType["TAG_OPEN_END"] = 1] = "TAG_OPEN_END"; - TokenType[TokenType["TAG_OPEN_END_VOID"] = 2] = "TAG_OPEN_END_VOID"; - TokenType[TokenType["TAG_CLOSE"] = 3] = "TAG_CLOSE"; - TokenType[TokenType["TEXT"] = 4] = "TEXT"; - TokenType[TokenType["ESCAPABLE_RAW_TEXT"] = 5] = "ESCAPABLE_RAW_TEXT"; - TokenType[TokenType["RAW_TEXT"] = 6] = "RAW_TEXT"; - TokenType[TokenType["COMMENT_START"] = 7] = "COMMENT_START"; - TokenType[TokenType["COMMENT_END"] = 8] = "COMMENT_END"; - TokenType[TokenType["CDATA_START"] = 9] = "CDATA_START"; - TokenType[TokenType["CDATA_END"] = 10] = "CDATA_END"; - TokenType[TokenType["ATTR_NAME"] = 11] = "ATTR_NAME"; - TokenType[TokenType["ATTR_VALUE"] = 12] = "ATTR_VALUE"; - TokenType[TokenType["DOC_TYPE"] = 13] = "DOC_TYPE"; - TokenType[TokenType["EXPANSION_FORM_START"] = 14] = "EXPANSION_FORM_START"; - TokenType[TokenType["EXPANSION_CASE_VALUE"] = 15] = "EXPANSION_CASE_VALUE"; - TokenType[TokenType["EXPANSION_CASE_EXP_START"] = 16] = "EXPANSION_CASE_EXP_START"; - TokenType[TokenType["EXPANSION_CASE_EXP_END"] = 17] = "EXPANSION_CASE_EXP_END"; - TokenType[TokenType["EXPANSION_FORM_END"] = 18] = "EXPANSION_FORM_END"; - TokenType[TokenType["EOF"] = 19] = "EOF"; -})(TokenType$1 || (TokenType$1 = {})); -var Token$1 = /** @class */ (function () { - function Token(type, parts, sourceSpan) { - this.type = type; - this.parts = parts; - this.sourceSpan = sourceSpan; - } - return Token; -}()); -var TokenError = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(TokenError, _super); - function TokenError(errorMsg, tokenType, span) { - var _this = _super.call(this, span, errorMsg) || this; - _this.tokenType = tokenType; - return _this; - } - return TokenError; -}(ParseError)); -var TokenizeResult = /** @class */ (function () { - function TokenizeResult(tokens, errors) { - this.tokens = tokens; - this.errors = errors; - } - return TokenizeResult; -}()); -function tokenize(source, url, getTagDefinition, tokenizeExpansionForms, interpolationConfig) { - if (tokenizeExpansionForms === void 0) { tokenizeExpansionForms = false; } - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - return new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, tokenizeExpansionForms, interpolationConfig) - .tokenize(); -} -var _CR_OR_CRLF_REGEXP = /\r\n?/g; -function _unexpectedCharacterErrorMsg(charCode) { - var char = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode); - return "Unexpected character \"" + char + "\""; -} -function _unknownEntityErrorMsg(entitySrc) { - return "Unknown entity \"" + entitySrc + "\" - use the \"&#;\" or \"&#x;\" syntax"; -} -var _ControlFlowError = /** @class */ (function () { - function _ControlFlowError(error) { - this.error = error; - } - return _ControlFlowError; -}()); -// See http://www.w3.org/TR/html51/syntax.html#writing -var _Tokenizer = /** @class */ (function () { - /** - * @param _file The html source - * @param _getTagDefinition - * @param _tokenizeIcu Whether to tokenize ICU messages (considered as text nodes when false) - * @param _interpolationConfig - */ - function _Tokenizer(_file, _getTagDefinition, _tokenizeIcu, _interpolationConfig) { - if (_interpolationConfig === void 0) { _interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - this._file = _file; - this._getTagDefinition = _getTagDefinition; - this._tokenizeIcu = _tokenizeIcu; - this._interpolationConfig = _interpolationConfig; - // Note: this is always lowercase! - this._peek = -1; - this._nextPeek = -1; - this._index = -1; - this._line = 0; - this._column = -1; - this._expansionCaseStack = []; - this._inInterpolation = false; - this.tokens = []; - this.errors = []; - this._input = _file.content; - this._length = _file.content.length; - this._advance(); - } - _Tokenizer.prototype._processCarriageReturns = function (content) { - // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream - // In order to keep the original position in the source, we can not - // pre-process it. - // Instead CRs are processed right before instantiating the tokens. - return content.replace(_CR_OR_CRLF_REGEXP, '\n'); - }; - _Tokenizer.prototype.tokenize = function () { - while (this._peek !== $EOF) { - var start = this._getLocation(); - try { - if (this._attemptCharCode($LT)) { - if (this._attemptCharCode($BANG)) { - if (this._attemptCharCode($LBRACKET)) { - this._consumeCdata(start); - } - else if (this._attemptCharCode($MINUS)) { - this._consumeComment(start); - } - else { - this._consumeDocType(start); - } - } - else if (this._attemptCharCode($SLASH)) { - this._consumeTagClose(start); - } - else { - this._consumeTagOpen(start); - } - } - else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) { - this._consumeText(); - } - } - catch (e) { - if (e instanceof _ControlFlowError) { - this.errors.push(e.error); - } - else { - throw e; - } - } - } - this._beginToken(TokenType$1.EOF); - this._endToken([]); - return new TokenizeResult(mergeTextTokens(this.tokens), this.errors); - }; - /** - * @returns whether an ICU token has been created - * @internal - */ - _Tokenizer.prototype._tokenizeExpansionForm = function () { - if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) { - this._consumeExpansionFormStart(); - return true; - } - if (isExpansionCaseStart(this._peek) && this._isInExpansionForm()) { - this._consumeExpansionCaseStart(); - return true; - } - if (this._peek === $RBRACE) { - if (this._isInExpansionCase()) { - this._consumeExpansionCaseEnd(); - return true; - } - if (this._isInExpansionForm()) { - this._consumeExpansionFormEnd(); - return true; - } - } - return false; - }; - _Tokenizer.prototype._getLocation = function () { - return new ParseLocation(this._file, this._index, this._line, this._column); - }; - _Tokenizer.prototype._getSpan = function (start, end) { - if (start === void 0) { start = this._getLocation(); } - if (end === void 0) { end = this._getLocation(); } - return new ParseSourceSpan(start, end); - }; - _Tokenizer.prototype._beginToken = function (type, start) { - if (start === void 0) { start = this._getLocation(); } - this._currentTokenStart = start; - this._currentTokenType = type; - }; - _Tokenizer.prototype._endToken = function (parts, end) { - if (end === void 0) { end = this._getLocation(); } - var token = new Token$1(this._currentTokenType, parts, new ParseSourceSpan(this._currentTokenStart, end)); - this.tokens.push(token); - this._currentTokenStart = null; - this._currentTokenType = null; - return token; - }; - _Tokenizer.prototype._createError = function (msg, span) { - if (this._isInExpansionForm()) { - msg += " (Do you have an unescaped \"{\" in your template? Use \"{{ '{' }}\") to escape it.)"; - } - var error = new TokenError(msg, this._currentTokenType, span); - this._currentTokenStart = null; - this._currentTokenType = null; - return new _ControlFlowError(error); - }; - _Tokenizer.prototype._advance = function () { - if (this._index >= this._length) { - throw this._createError(_unexpectedCharacterErrorMsg($EOF), this._getSpan()); - } - if (this._peek === $LF) { - this._line++; - this._column = 0; - } - else if (this._peek !== $LF && this._peek !== $CR) { - this._column++; - } - this._index++; - this._peek = this._index >= this._length ? $EOF : this._input.charCodeAt(this._index); - this._nextPeek = - this._index + 1 >= this._length ? $EOF : this._input.charCodeAt(this._index + 1); - }; - _Tokenizer.prototype._attemptCharCode = function (charCode) { - if (this._peek === charCode) { - this._advance(); - return true; - } - return false; - }; - _Tokenizer.prototype._attemptCharCodeCaseInsensitive = function (charCode) { - if (compareCharCodeCaseInsensitive(this._peek, charCode)) { - this._advance(); - return true; - } - return false; - }; - _Tokenizer.prototype._requireCharCode = function (charCode) { - var location = this._getLocation(); - if (!this._attemptCharCode(charCode)) { - throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location, location)); - } - }; - _Tokenizer.prototype._attemptStr = function (chars) { - var len = chars.length; - if (this._index + len > this._length) { - return false; - } - var initialPosition = this._savePosition(); - for (var i = 0; i < len; i++) { - if (!this._attemptCharCode(chars.charCodeAt(i))) { - // If attempting to parse the string fails, we want to reset the parser - // to where it was before the attempt - this._restorePosition(initialPosition); - return false; - } - } - return true; - }; - _Tokenizer.prototype._attemptStrCaseInsensitive = function (chars) { - for (var i = 0; i < chars.length; i++) { - if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) { - return false; - } - } - return true; - }; - _Tokenizer.prototype._requireStr = function (chars) { - var location = this._getLocation(); - if (!this._attemptStr(chars)) { - throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location)); - } - }; - _Tokenizer.prototype._attemptCharCodeUntilFn = function (predicate) { - while (!predicate(this._peek)) { - this._advance(); - } - }; - _Tokenizer.prototype._requireCharCodeUntilFn = function (predicate, len) { - var start = this._getLocation(); - this._attemptCharCodeUntilFn(predicate); - if (this._index - start.offset < len) { - throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(start, start)); - } - }; - _Tokenizer.prototype._attemptUntilChar = function (char) { - while (this._peek !== char) { - this._advance(); - } - }; - _Tokenizer.prototype._readChar = function (decodeEntities) { - if (decodeEntities && this._peek === $AMPERSAND) { - return this._decodeEntity(); - } - else { - var index = this._index; - this._advance(); - return this._input[index]; - } - }; - _Tokenizer.prototype._decodeEntity = function () { - var start = this._getLocation(); - this._advance(); - if (this._attemptCharCode($HASH)) { - var isHex = this._attemptCharCode($x) || this._attemptCharCode($X); - var numberStart = this._getLocation().offset; - this._attemptCharCodeUntilFn(isDigitEntityEnd); - if (this._peek != $SEMICOLON) { - throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan()); - } - this._advance(); - var strNum = this._input.substring(numberStart, this._index - 1); - try { - var charCode = parseInt(strNum, isHex ? 16 : 10); - return String.fromCharCode(charCode); - } - catch (e) { - var entity = this._input.substring(start.offset + 1, this._index - 1); - throw this._createError(_unknownEntityErrorMsg(entity), this._getSpan(start)); - } - } - else { - var startPosition = this._savePosition(); - this._attemptCharCodeUntilFn(isNamedEntityEnd); - if (this._peek != $SEMICOLON) { - this._restorePosition(startPosition); - return '&'; - } - this._advance(); - var name_1 = this._input.substring(start.offset + 1, this._index - 1); - var char = NAMED_ENTITIES[name_1]; - if (!char) { - throw this._createError(_unknownEntityErrorMsg(name_1), this._getSpan(start)); - } - return char; - } - }; - _Tokenizer.prototype._consumeRawText = function (decodeEntities, firstCharOfEnd, attemptEndRest) { - var tagCloseStart; - var textStart = this._getLocation(); - this._beginToken(decodeEntities ? TokenType$1.ESCAPABLE_RAW_TEXT : TokenType$1.RAW_TEXT, textStart); - var parts = []; - while (true) { - tagCloseStart = this._getLocation(); - if (this._attemptCharCode(firstCharOfEnd) && attemptEndRest()) { - break; - } - if (this._index > tagCloseStart.offset) { - // add the characters consumed by the previous if statement to the output - parts.push(this._input.substring(tagCloseStart.offset, this._index)); - } - while (this._peek !== firstCharOfEnd) { - parts.push(this._readChar(decodeEntities)); - } - } - return this._endToken([this._processCarriageReturns(parts.join(''))], tagCloseStart); - }; - _Tokenizer.prototype._consumeComment = function (start) { - var _this = this; - this._beginToken(TokenType$1.COMMENT_START, start); - this._requireCharCode($MINUS); - this._endToken([]); - var textToken = this._consumeRawText(false, $MINUS, function () { return _this._attemptStr('->'); }); - this._beginToken(TokenType$1.COMMENT_END, textToken.sourceSpan.end); - this._endToken([]); - }; - _Tokenizer.prototype._consumeCdata = function (start) { - var _this = this; - this._beginToken(TokenType$1.CDATA_START, start); - this._requireStr('CDATA['); - this._endToken([]); - var textToken = this._consumeRawText(false, $RBRACKET, function () { return _this._attemptStr(']>'); }); - this._beginToken(TokenType$1.CDATA_END, textToken.sourceSpan.end); - this._endToken([]); - }; - _Tokenizer.prototype._consumeDocType = function (start) { - this._beginToken(TokenType$1.DOC_TYPE, start); - this._attemptUntilChar($GT); - this._advance(); - this._endToken([this._input.substring(start.offset + 2, this._index - 1)]); - }; - _Tokenizer.prototype._consumePrefixAndName = function () { - var nameOrPrefixStart = this._index; - var prefix = null; - while (this._peek !== $COLON && !isPrefixEnd(this._peek)) { - this._advance(); - } - var nameStart; - if (this._peek === $COLON) { - this._advance(); - prefix = this._input.substring(nameOrPrefixStart, this._index - 1); - nameStart = this._index; - } - else { - nameStart = nameOrPrefixStart; - } - this._requireCharCodeUntilFn(isNameEnd, this._index === nameStart ? 1 : 0); - var name = this._input.substring(nameStart, this._index); - return [prefix, name]; - }; - _Tokenizer.prototype._consumeTagOpen = function (start) { - var savedPos = this._savePosition(); - var tagName; - var lowercaseTagName; - try { - if (!isAsciiLetter(this._peek)) { - throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan()); - } - var nameStart = this._index; - this._consumeTagOpenStart(start); - tagName = this._input.substring(nameStart, this._index); - lowercaseTagName = tagName.toLowerCase(); - this._attemptCharCodeUntilFn(isNotWhitespace); - while (this._peek !== $SLASH && this._peek !== $GT) { - this._consumeAttributeName(); - this._attemptCharCodeUntilFn(isNotWhitespace); - if (this._attemptCharCode($EQ)) { - this._attemptCharCodeUntilFn(isNotWhitespace); - this._consumeAttributeValue(); - } - this._attemptCharCodeUntilFn(isNotWhitespace); - } - this._consumeTagOpenEnd(); - } - catch (e) { - if (e instanceof _ControlFlowError) { - // When the start tag is invalid, assume we want a "<" - this._restorePosition(savedPos); - // Back to back text tokens are merged at the end - this._beginToken(TokenType$1.TEXT, start); - this._endToken(['<']); - return; - } - throw e; - } - var contentTokenType = this._getTagDefinition(tagName).contentType; - if (contentTokenType === TagContentType.RAW_TEXT) { - this._consumeRawTextWithTagClose(lowercaseTagName, false); - } - else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) { - this._consumeRawTextWithTagClose(lowercaseTagName, true); - } - }; - _Tokenizer.prototype._consumeRawTextWithTagClose = function (lowercaseTagName, decodeEntities) { - var _this = this; - var textToken = this._consumeRawText(decodeEntities, $LT, function () { - if (!_this._attemptCharCode($SLASH)) - return false; - _this._attemptCharCodeUntilFn(isNotWhitespace); - if (!_this._attemptStrCaseInsensitive(lowercaseTagName)) - return false; - _this._attemptCharCodeUntilFn(isNotWhitespace); - return _this._attemptCharCode($GT); - }); - this._beginToken(TokenType$1.TAG_CLOSE, textToken.sourceSpan.end); - this._endToken([null, lowercaseTagName]); - }; - _Tokenizer.prototype._consumeTagOpenStart = function (start) { - this._beginToken(TokenType$1.TAG_OPEN_START, start); - var parts = this._consumePrefixAndName(); - this._endToken(parts); - }; - _Tokenizer.prototype._consumeAttributeName = function () { - this._beginToken(TokenType$1.ATTR_NAME); - var prefixAndName = this._consumePrefixAndName(); - this._endToken(prefixAndName); - }; - _Tokenizer.prototype._consumeAttributeValue = function () { - this._beginToken(TokenType$1.ATTR_VALUE); - var value; - if (this._peek === $SQ || this._peek === $DQ) { - var quoteChar = this._peek; - this._advance(); - var parts = []; - while (this._peek !== quoteChar) { - parts.push(this._readChar(true)); - } - value = parts.join(''); - this._advance(); - } - else { - var valueStart = this._index; - this._requireCharCodeUntilFn(isNameEnd, 1); - value = this._input.substring(valueStart, this._index); - } - this._endToken([this._processCarriageReturns(value)]); - }; - _Tokenizer.prototype._consumeTagOpenEnd = function () { - var tokenType = this._attemptCharCode($SLASH) ? TokenType$1.TAG_OPEN_END_VOID : TokenType$1.TAG_OPEN_END; - this._beginToken(tokenType); - this._requireCharCode($GT); - this._endToken([]); - }; - _Tokenizer.prototype._consumeTagClose = function (start) { - this._beginToken(TokenType$1.TAG_CLOSE, start); - this._attemptCharCodeUntilFn(isNotWhitespace); - var prefixAndName = this._consumePrefixAndName(); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._requireCharCode($GT); - this._endToken(prefixAndName); - }; - _Tokenizer.prototype._consumeExpansionFormStart = function () { - this._beginToken(TokenType$1.EXPANSION_FORM_START, this._getLocation()); - this._requireCharCode($LBRACE); - this._endToken([]); - this._expansionCaseStack.push(TokenType$1.EXPANSION_FORM_START); - this._beginToken(TokenType$1.RAW_TEXT, this._getLocation()); - var condition = this._readUntil($COMMA); - this._endToken([condition], this._getLocation()); - this._requireCharCode($COMMA); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._beginToken(TokenType$1.RAW_TEXT, this._getLocation()); - var type = this._readUntil($COMMA); - this._endToken([type], this._getLocation()); - this._requireCharCode($COMMA); - this._attemptCharCodeUntilFn(isNotWhitespace); - }; - _Tokenizer.prototype._consumeExpansionCaseStart = function () { - this._beginToken(TokenType$1.EXPANSION_CASE_VALUE, this._getLocation()); - var value = this._readUntil($LBRACE).trim(); - this._endToken([value], this._getLocation()); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._beginToken(TokenType$1.EXPANSION_CASE_EXP_START, this._getLocation()); - this._requireCharCode($LBRACE); - this._endToken([], this._getLocation()); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._expansionCaseStack.push(TokenType$1.EXPANSION_CASE_EXP_START); - }; - _Tokenizer.prototype._consumeExpansionCaseEnd = function () { - this._beginToken(TokenType$1.EXPANSION_CASE_EXP_END, this._getLocation()); - this._requireCharCode($RBRACE); - this._endToken([], this._getLocation()); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._expansionCaseStack.pop(); - }; - _Tokenizer.prototype._consumeExpansionFormEnd = function () { - this._beginToken(TokenType$1.EXPANSION_FORM_END, this._getLocation()); - this._requireCharCode($RBRACE); - this._endToken([]); - this._expansionCaseStack.pop(); - }; - _Tokenizer.prototype._consumeText = function () { - var start = this._getLocation(); - this._beginToken(TokenType$1.TEXT, start); - var parts = []; - do { - if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) { - parts.push(this._interpolationConfig.start); - this._inInterpolation = true; - } - else if (this._interpolationConfig && this._inInterpolation && - this._attemptStr(this._interpolationConfig.end)) { - parts.push(this._interpolationConfig.end); - this._inInterpolation = false; - } - else { - parts.push(this._readChar(true)); - } - } while (!this._isTextEnd()); - this._endToken([this._processCarriageReturns(parts.join(''))]); - }; - _Tokenizer.prototype._isTextEnd = function () { - if (this._peek === $LT || this._peek === $EOF) { - return true; - } - if (this._tokenizeIcu && !this._inInterpolation) { - if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) { - // start of an expansion form - return true; - } - if (this._peek === $RBRACE && this._isInExpansionCase()) { - // end of and expansion case - return true; - } - } - return false; - }; - _Tokenizer.prototype._savePosition = function () { - return [this._peek, this._index, this._column, this._line, this.tokens.length]; - }; - _Tokenizer.prototype._readUntil = function (char) { - var start = this._index; - this._attemptUntilChar(char); - return this._input.substring(start, this._index); - }; - _Tokenizer.prototype._restorePosition = function (position) { - this._peek = position[0]; - this._index = position[1]; - this._column = position[2]; - this._line = position[3]; - var nbTokens = position[4]; - if (nbTokens < this.tokens.length) { - // remove any extra tokens - this.tokens = this.tokens.slice(0, nbTokens); - } - }; - _Tokenizer.prototype._isInExpansionCase = function () { - return this._expansionCaseStack.length > 0 && - this._expansionCaseStack[this._expansionCaseStack.length - 1] === - TokenType$1.EXPANSION_CASE_EXP_START; - }; - _Tokenizer.prototype._isInExpansionForm = function () { - return this._expansionCaseStack.length > 0 && - this._expansionCaseStack[this._expansionCaseStack.length - 1] === - TokenType$1.EXPANSION_FORM_START; - }; - return _Tokenizer; -}()); -function isNotWhitespace(code) { - return !isWhitespace(code) || code === $EOF; -} -function isNameEnd(code) { - return isWhitespace(code) || code === $GT || code === $SLASH || - code === $SQ || code === $DQ || code === $EQ; -} -function isPrefixEnd(code) { - return (code < $a || $z < code) && (code < $A || $Z < code) && - (code < $0 || code > $9); -} -function isDigitEntityEnd(code) { - return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code); -} -function isNamedEntityEnd(code) { - return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code); -} -function isExpansionFormStart(input, offset, interpolationConfig) { - var isInterpolationStart = interpolationConfig ? input.indexOf(interpolationConfig.start, offset) == offset : false; - return input.charCodeAt(offset) == $LBRACE && !isInterpolationStart; -} -function isExpansionCaseStart(peek) { - return peek === $EQ || isAsciiLetter(peek) || isDigit(peek); -} -function compareCharCodeCaseInsensitive(code1, code2) { - return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2); -} -function toUpperCaseCharCode(code) { - return code >= $a && code <= $z ? code - $a + $A : code; -} -function mergeTextTokens(srcTokens) { - var dstTokens = []; - var lastDstToken = undefined; - for (var i = 0; i < srcTokens.length; i++) { - var token = srcTokens[i]; - if (lastDstToken && lastDstToken.type == TokenType$1.TEXT && token.type == TokenType$1.TEXT) { - lastDstToken.parts[0] += token.parts[0]; - lastDstToken.sourceSpan.end = token.sourceSpan.end; - } - else { - lastDstToken = token; - dstTokens.push(lastDstToken); - } - } - return dstTokens; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var TreeError = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(TreeError, _super); - function TreeError(elementName, span, msg) { - var _this = _super.call(this, span, msg) || this; - _this.elementName = elementName; - return _this; - } - TreeError.create = function (elementName, span, msg) { - return new TreeError(elementName, span, msg); - }; - return TreeError; -}(ParseError)); -var ParseTreeResult = /** @class */ (function () { - function ParseTreeResult(rootNodes, errors) { - this.rootNodes = rootNodes; - this.errors = errors; - } - return ParseTreeResult; -}()); -var Parser$1 = /** @class */ (function () { - function Parser(getTagDefinition) { - this.getTagDefinition = getTagDefinition; - } - Parser.prototype.parse = function (source, url, parseExpansionForms, interpolationConfig) { - if (parseExpansionForms === void 0) { parseExpansionForms = false; } - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - var tokensAndErrors = tokenize(source, url, this.getTagDefinition, parseExpansionForms, interpolationConfig); - var treeAndErrors = new _TreeBuilder(tokensAndErrors.tokens, this.getTagDefinition).build(); - return new ParseTreeResult(treeAndErrors.rootNodes, tokensAndErrors.errors.concat(treeAndErrors.errors)); - }; - return Parser; -}()); -var _TreeBuilder = /** @class */ (function () { - function _TreeBuilder(tokens, getTagDefinition) { - this.tokens = tokens; - this.getTagDefinition = getTagDefinition; - this._index = -1; - this._rootNodes = []; - this._errors = []; - this._elementStack = []; - this._advance(); - } - _TreeBuilder.prototype.build = function () { - while (this._peek.type !== TokenType$1.EOF) { - if (this._peek.type === TokenType$1.TAG_OPEN_START) { - this._consumeStartTag(this._advance()); - } - else if (this._peek.type === TokenType$1.TAG_CLOSE) { - this._consumeEndTag(this._advance()); - } - else if (this._peek.type === TokenType$1.CDATA_START) { - this._closeVoidElement(); - this._consumeCdata(this._advance()); - } - else if (this._peek.type === TokenType$1.COMMENT_START) { - this._closeVoidElement(); - this._consumeComment(this._advance()); - } - else if (this._peek.type === TokenType$1.TEXT || this._peek.type === TokenType$1.RAW_TEXT || - this._peek.type === TokenType$1.ESCAPABLE_RAW_TEXT) { - this._closeVoidElement(); - this._consumeText(this._advance()); - } - else if (this._peek.type === TokenType$1.EXPANSION_FORM_START) { - this._consumeExpansion(this._advance()); - } - else { - // Skip all other tokens... - this._advance(); - } - } - return new ParseTreeResult(this._rootNodes, this._errors); - }; - _TreeBuilder.prototype._advance = function () { - var prev = this._peek; - if (this._index < this.tokens.length - 1) { - // Note: there is always an EOF token at the end - this._index++; - } - this._peek = this.tokens[this._index]; - return prev; - }; - _TreeBuilder.prototype._advanceIf = function (type) { - if (this._peek.type === type) { - return this._advance(); - } - return null; - }; - _TreeBuilder.prototype._consumeCdata = function (startToken) { - this._consumeText(this._advance()); - this._advanceIf(TokenType$1.CDATA_END); - }; - _TreeBuilder.prototype._consumeComment = function (token) { - var text = this._advanceIf(TokenType$1.RAW_TEXT); - this._advanceIf(TokenType$1.COMMENT_END); - var value = text != null ? text.parts[0].trim() : null; - this._addToParent(new Comment(value, token.sourceSpan)); - }; - _TreeBuilder.prototype._consumeExpansion = function (token) { - var switchValue = this._advance(); - var type = this._advance(); - var cases = []; - // read = - while (this._peek.type === TokenType$1.EXPANSION_CASE_VALUE) { - var expCase = this._parseExpansionCase(); - if (!expCase) - return; // error - cases.push(expCase); - } - // read the final } - if (this._peek.type !== TokenType$1.EXPANSION_FORM_END) { - this._errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '}'.")); - return; - } - var sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end); - this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan)); - this._advance(); - }; - _TreeBuilder.prototype._parseExpansionCase = function () { - var value = this._advance(); - // read { - if (this._peek.type !== TokenType$1.EXPANSION_CASE_EXP_START) { - this._errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '{'.")); - return null; - } - // read until } - var start = this._advance(); - var exp = this._collectExpansionExpTokens(start); - if (!exp) - return null; - var end = this._advance(); - exp.push(new Token$1(TokenType$1.EOF, [], end.sourceSpan)); - // parse everything in between { and } - var parsedExp = new _TreeBuilder(exp, this.getTagDefinition).build(); - if (parsedExp.errors.length > 0) { - this._errors = this._errors.concat(parsedExp.errors); - return null; - } - var sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end); - var expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end); - return new ExpansionCase(value.parts[0], parsedExp.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan); - }; - _TreeBuilder.prototype._collectExpansionExpTokens = function (start) { - var exp = []; - var expansionFormStack = [TokenType$1.EXPANSION_CASE_EXP_START]; - while (true) { - if (this._peek.type === TokenType$1.EXPANSION_FORM_START || - this._peek.type === TokenType$1.EXPANSION_CASE_EXP_START) { - expansionFormStack.push(this._peek.type); - } - if (this._peek.type === TokenType$1.EXPANSION_CASE_EXP_END) { - if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_CASE_EXP_START)) { - expansionFormStack.pop(); - if (expansionFormStack.length == 0) - return exp; - } - else { - this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'.")); - return null; - } - } - if (this._peek.type === TokenType$1.EXPANSION_FORM_END) { - if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_FORM_START)) { - expansionFormStack.pop(); - } - else { - this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'.")); - return null; - } - } - if (this._peek.type === TokenType$1.EOF) { - this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'.")); - return null; - } - exp.push(this._advance()); - } - }; - _TreeBuilder.prototype._consumeText = function (token) { - var text = token.parts[0]; - if (text.length > 0 && text[0] == '\n') { - var parent_1 = this._getParentElement(); - if (parent_1 != null && parent_1.children.length == 0 && - this.getTagDefinition(parent_1.name).ignoreFirstLf) { - text = text.substring(1); - } - } - if (text.length > 0) { - this._addToParent(new Text(text, token.sourceSpan)); - } - }; - _TreeBuilder.prototype._closeVoidElement = function () { - var el = this._getParentElement(); - if (el && this.getTagDefinition(el.name).isVoid) { - this._elementStack.pop(); - } - }; - _TreeBuilder.prototype._consumeStartTag = function (startTagToken) { - var prefix = startTagToken.parts[0]; - var name = startTagToken.parts[1]; - var attrs = []; - while (this._peek.type === TokenType$1.ATTR_NAME) { - attrs.push(this._consumeAttr(this._advance())); - } - var fullName = this._getElementFullName(prefix, name, this._getParentElement()); - var selfClosing = false; - // Note: There could have been a tokenizer error - // so that we don't get a token for the end tag... - if (this._peek.type === TokenType$1.TAG_OPEN_END_VOID) { - this._advance(); - selfClosing = true; - var tagDef = this.getTagDefinition(fullName); - if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) { - this._errors.push(TreeError.create(fullName, startTagToken.sourceSpan, "Only void and foreign elements can be self closed \"" + startTagToken.parts[1] + "\"")); - } - } - else if (this._peek.type === TokenType$1.TAG_OPEN_END) { - this._advance(); - selfClosing = false; - } - var end = this._peek.sourceSpan.start; - var span = new ParseSourceSpan(startTagToken.sourceSpan.start, end); - var el = new Element(fullName, attrs, [], span, span, undefined); - this._pushElement(el); - if (selfClosing) { - this._popElement(fullName); - el.endSourceSpan = span; - } - }; - _TreeBuilder.prototype._pushElement = function (el) { - var parentEl = this._getParentElement(); - if (parentEl && this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) { - this._elementStack.pop(); - } - var tagDef = this.getTagDefinition(el.name); - var _a = this._getParentElementSkippingContainers(), parent = _a.parent, container = _a.container; - if (parent && tagDef.requireExtraParent(parent.name)) { - var newParent = new Element(tagDef.parentToAdd, [], [], el.sourceSpan, el.startSourceSpan, el.endSourceSpan); - this._insertBeforeContainer(parent, container, newParent); - } - this._addToParent(el); - this._elementStack.push(el); - }; - _TreeBuilder.prototype._consumeEndTag = function (endTagToken) { - var fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement()); - if (this._getParentElement()) { - this._getParentElement().endSourceSpan = endTagToken.sourceSpan; - } - if (this.getTagDefinition(fullName).isVoid) { - this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, "Void elements do not have end tags \"" + endTagToken.parts[1] + "\"")); - } - else if (!this._popElement(fullName)) { - var errMsg = "Unexpected closing tag \"" + fullName + "\". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags"; - this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg)); - } - }; - _TreeBuilder.prototype._popElement = function (fullName) { - for (var stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) { - var el = this._elementStack[stackIndex]; - if (el.name == fullName) { - this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex); - return true; - } - if (!this.getTagDefinition(el.name).closedByParent) { - return false; - } - } - return false; - }; - _TreeBuilder.prototype._consumeAttr = function (attrName) { - var fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]); - var end = attrName.sourceSpan.end; - var value = ''; - var valueSpan = undefined; - if (this._peek.type === TokenType$1.ATTR_VALUE) { - var valueToken = this._advance(); - value = valueToken.parts[0]; - end = valueToken.sourceSpan.end; - valueSpan = valueToken.sourceSpan; - } - return new Attribute(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end), valueSpan); - }; - _TreeBuilder.prototype._getParentElement = function () { - return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null; - }; - /** - * Returns the parent in the DOM and the container. - * - * `` elements are skipped as they are not rendered as DOM element. - */ - _TreeBuilder.prototype._getParentElementSkippingContainers = function () { - var container = null; - for (var i = this._elementStack.length - 1; i >= 0; i--) { - if (!isNgContainer(this._elementStack[i].name)) { - return { parent: this._elementStack[i], container: container }; - } - container = this._elementStack[i]; - } - return { parent: null, container: container }; - }; - _TreeBuilder.prototype._addToParent = function (node) { - var parent = this._getParentElement(); - if (parent != null) { - parent.children.push(node); - } - else { - this._rootNodes.push(node); - } - }; - /** - * Insert a node between the parent and the container. - * When no container is given, the node is appended as a child of the parent. - * Also updates the element stack accordingly. - * - * @internal - */ - _TreeBuilder.prototype._insertBeforeContainer = function (parent, container, node) { - if (!container) { - this._addToParent(node); - this._elementStack.push(node); - } - else { - if (parent) { - // replace the container with the new node in the children - var index = parent.children.indexOf(container); - parent.children[index] = node; - } - else { - this._rootNodes.push(node); - } - node.children.push(container); - this._elementStack.splice(this._elementStack.indexOf(container), 0, node); - } - }; - _TreeBuilder.prototype._getElementFullName = function (prefix, localName, parentElement) { - if (prefix == null) { - prefix = this.getTagDefinition(localName).implicitNamespacePrefix; - if (prefix == null && parentElement != null) { - prefix = getNsPrefix(parentElement.name); - } - } - return mergeNsAndName(prefix, localName); - }; - return _TreeBuilder; -}()); -function lastOnStack(stack, element) { - return stack.length > 0 && stack[stack.length - 1] === element; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var HtmlParser = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(HtmlParser, _super); - function HtmlParser() { - return _super.call(this, getHtmlTagDefinition) || this; - } - HtmlParser.prototype.parse = function (source, url, parseExpansionForms, interpolationConfig) { - if (parseExpansionForms === void 0) { parseExpansionForms = false; } - if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; } - return _super.prototype.parse.call(this, source, url, parseExpansionForms, interpolationConfig); - }; - return HtmlParser; -}(Parser$1)); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var PRESERVE_WS_ATTR_NAME = 'ngPreserveWhitespaces'; -var SKIP_WS_TRIM_TAGS = new Set(['pre', 'template', 'textarea', 'script', 'style']); -// Equivalent to \s with \u00a0 (non-breaking space) excluded. -// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp -var WS_CHARS = ' \f\n\r\t\v\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff'; -var NO_WS_REGEXP = new RegExp("[^" + WS_CHARS + "]"); -var WS_REPLACE_REGEXP = new RegExp("[" + WS_CHARS + "]{2,}", 'g'); -function hasPreserveWhitespacesAttr(attrs) { - return attrs.some(function (attr) { return attr.name === PRESERVE_WS_ATTR_NAME; }); -} -/** - * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see: - * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32 - * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character - * and later on replaced by a space. We are re-implementing the same idea here. - */ -function replaceNgsp(value) { - // lexer is replacing the &ngsp; pseudo-entity with NGSP_UNICODE - return value.replace(new RegExp(NGSP_UNICODE, 'g'), ' '); -} -/** - * This visitor can walk HTML parse tree and remove / trim text nodes using the following rules: - * - consider spaces, tabs and new lines as whitespace characters; - * - drop text nodes consisting of whitespace characters only; - * - for all other text nodes replace consecutive whitespace characters with one space; - * - convert &ngsp; pseudo-entity to a single space; - * - * Removal and trimming of whitespaces have positive performance impact (less code to generate - * while compiling templates, faster view creation). At the same time it can be "destructive" - * in some cases (whitespaces can influence layout). Because of the potential of breaking layout - * this visitor is not activated by default in Angular 5 and people need to explicitly opt-in for - * whitespace removal. The default option for whitespace removal will be revisited in Angular 6 - * and might be changed to "on" by default. - */ -var WhitespaceVisitor = /** @class */ (function () { - function WhitespaceVisitor() { - } - WhitespaceVisitor.prototype.visitElement = function (element, context) { - if (SKIP_WS_TRIM_TAGS.has(element.name) || hasPreserveWhitespacesAttr(element.attrs)) { - // don't descent into elements where we need to preserve whitespaces - // but still visit all attributes to eliminate one used as a market to preserve WS - return new Element(element.name, visitAll(this, element.attrs), element.children, element.sourceSpan, element.startSourceSpan, element.endSourceSpan); - } - return new Element(element.name, element.attrs, visitAll(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan); - }; - WhitespaceVisitor.prototype.visitAttribute = function (attribute, context) { - return attribute.name !== PRESERVE_WS_ATTR_NAME ? attribute : null; - }; - WhitespaceVisitor.prototype.visitText = function (text, context) { - var isNotBlank = text.value.match(NO_WS_REGEXP); - if (isNotBlank) { - return new Text(replaceNgsp(text.value).replace(WS_REPLACE_REGEXP, ' '), text.sourceSpan); - } - return null; - }; - WhitespaceVisitor.prototype.visitComment = function (comment, context) { return comment; }; - WhitespaceVisitor.prototype.visitExpansion = function (expansion, context) { return expansion; }; - WhitespaceVisitor.prototype.visitExpansionCase = function (expansionCase, context) { return expansionCase; }; - return WhitespaceVisitor; -}()); -function removeWhitespaces(htmlAstWithErrors) { - return new ParseTreeResult(visitAll(new WhitespaceVisitor(), htmlAstWithErrors.rootNodes), htmlAstWithErrors.errors); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// ================================================================================================= -// ================================================================================================= -// =========== S T O P - S T O P - S T O P - S T O P - S T O P - S T O P =========== -// ================================================================================================= -// ================================================================================================= -// -// DO NOT EDIT THIS LIST OF SECURITY SENSITIVE PROPERTIES WITHOUT A SECURITY REVIEW! -// Reach out to mprobst for details. -// -// ================================================================================================= -/** Map from tagName|propertyName SecurityContext. Properties applying to all tags use '*'. */ -var _SECURITY_SCHEMA; -function SECURITY_SCHEMA() { - if (!_SECURITY_SCHEMA) { - _SECURITY_SCHEMA = {}; - // Case is insignificant below, all element and attribute names are lower-cased for lookup. - registerContext(SecurityContext.HTML, [ - 'iframe|srcdoc', - '*|innerHTML', - '*|outerHTML', - ]); - registerContext(SecurityContext.STYLE, ['*|style']); - // NB: no SCRIPT contexts here, they are never allowed due to the parser stripping them. - registerContext(SecurityContext.URL, [ - '*|formAction', 'area|href', 'area|ping', 'audio|src', 'a|href', - 'a|ping', 'blockquote|cite', 'body|background', 'del|cite', 'form|action', - 'img|src', 'img|srcset', 'input|src', 'ins|cite', 'q|cite', - 'source|src', 'source|srcset', 'track|src', 'video|poster', 'video|src', - ]); - registerContext(SecurityContext.RESOURCE_URL, [ - 'applet|code', - 'applet|codebase', - 'base|href', - 'embed|src', - 'frame|src', - 'head|profile', - 'html|manifest', - 'iframe|src', - 'link|href', - 'media|src', - 'object|codebase', - 'object|data', - 'script|src', - ]); - } - return _SECURITY_SCHEMA; -} -function registerContext(ctx, specs) { - var e_1, _a; - try { - for (var specs_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(specs), specs_1_1 = specs_1.next(); !specs_1_1.done; specs_1_1 = specs_1.next()) { - var spec = specs_1_1.value; - _SECURITY_SCHEMA[spec.toLowerCase()] = ctx; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (specs_1_1 && !specs_1_1.done && (_a = specs_1.return)) _a.call(specs_1); - } - finally { if (e_1) throw e_1.error; } - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var ElementSchemaRegistry = /** @class */ (function () { - function ElementSchemaRegistry() { - } - return ElementSchemaRegistry; -}()); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var BOOLEAN = 'boolean'; -var NUMBER = 'number'; -var STRING = 'string'; -var OBJECT = 'object'; -/** - * This array represents the DOM schema. It encodes inheritance, properties, and events. - * - * ## Overview - * - * Each line represents one kind of element. The `element_inheritance` and properties are joined - * using `element_inheritance|properties` syntax. - * - * ## Element Inheritance - * - * The `element_inheritance` can be further subdivided as `element1,element2,...^parentElement`. - * Here the individual elements are separated by `,` (commas). Every element in the list - * has identical properties. - * - * An `element` may inherit additional properties from `parentElement` If no `^parentElement` is - * specified then `""` (blank) element is assumed. - * - * NOTE: The blank element inherits from root `[Element]` element, the super element of all - * elements. - * - * NOTE an element prefix such as `:svg:` has no special meaning to the schema. - * - * ## Properties - * - * Each element has a set of properties separated by `,` (commas). Each property can be prefixed - * by a special character designating its type: - * - * - (no prefix): property is a string. - * - `*`: property represents an event. - * - `!`: property is a boolean. - * - `#`: property is a number. - * - `%`: property is an object. - * - * ## Query - * - * The class creates an internal squas representation which allows to easily answer the query of - * if a given property exist on a given element. - * - * NOTE: We don't yet support querying for types or events. - * NOTE: This schema is auto extracted from `schema_extractor.ts` located in the test folder, - * see dom_element_schema_registry_spec.ts - */ -// ================================================================================================= -// ================================================================================================= -// =========== S T O P - S T O P - S T O P - S T O P - S T O P - S T O P =========== -// ================================================================================================= -// ================================================================================================= -// -// DO NOT EDIT THIS DOM SCHEMA WITHOUT A SECURITY REVIEW! -// -// Newly added properties must be security reviewed and assigned an appropriate SecurityContext in -// dom_security_schema.ts. Reach out to mprobst & rjamet for details. -// -// ================================================================================================= -var SCHEMA = [ - '[Element]|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop,slot' + - /* added manually to avoid breaking changes */ - ',*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored', - '[HTMLElement]^[Element]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate', - 'abbr,address,article,aside,b,bdi,bdo,cite,code,dd,dfn,dt,em,figcaption,figure,footer,header,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate', - 'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,src,%srcObject,#volume', - ':svg:^[HTMLElement]|*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,%style,#tabIndex', - ':svg:graphics^:svg:|', - ':svg:animation^:svg:|*begin,*end,*repeat', - ':svg:geometry^:svg:|', - ':svg:componentTransferFunction^:svg:|', - ':svg:gradient^:svg:|', - ':svg:textContent^:svg:graphics|', - ':svg:textPositioning^:svg:textContent|', - 'a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,rev,search,shape,target,text,type,username', - 'area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,search,shape,target,username', - 'audio^media|', - 'br^[HTMLElement]|clear', - 'base^[HTMLElement]|href,target', - 'body^[HTMLElement]|aLink,background,bgColor,link,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink', - 'button^[HTMLElement]|!autofocus,!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value', - 'canvas^[HTMLElement]|#height,#width', - 'content^[HTMLElement]|select', - 'dl^[HTMLElement]|!compact', - 'datalist^[HTMLElement]|', - 'details^[HTMLElement]|!open', - 'dialog^[HTMLElement]|!open,returnValue', - 'dir^[HTMLElement]|!compact', - 'div^[HTMLElement]|align', - 'embed^[HTMLElement]|align,height,name,src,type,width', - 'fieldset^[HTMLElement]|!disabled,name', - 'font^[HTMLElement]|color,face,size', - 'form^[HTMLElement]|acceptCharset,action,autocomplete,encoding,enctype,method,name,!noValidate,target', - 'frame^[HTMLElement]|frameBorder,longDesc,marginHeight,marginWidth,name,!noResize,scrolling,src', - 'frameset^[HTMLElement]|cols,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows', - 'hr^[HTMLElement]|align,color,!noShade,size,width', - 'head^[HTMLElement]|', - 'h1,h2,h3,h4,h5,h6^[HTMLElement]|align', - 'html^[HTMLElement]|version', - 'iframe^[HTMLElement]|align,!allowFullscreen,frameBorder,height,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width', - 'img^[HTMLElement]|align,alt,border,%crossOrigin,#height,#hspace,!isMap,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width', - 'input^[HTMLElement]|accept,align,alt,autocapitalize,autocomplete,!autofocus,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width', - 'li^[HTMLElement]|type,#value', - 'label^[HTMLElement]|htmlFor', - 'legend^[HTMLElement]|align', - 'link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type', - 'map^[HTMLElement]|name', - 'marquee^[HTMLElement]|behavior,bgColor,direction,height,#hspace,#loop,#scrollAmount,#scrollDelay,!trueSpeed,#vspace,width', - 'menu^[HTMLElement]|!compact', - 'meta^[HTMLElement]|content,httpEquiv,name,scheme', - 'meter^[HTMLElement]|#high,#low,#max,#min,#optimum,#value', - 'ins,del^[HTMLElement]|cite,dateTime', - 'ol^[HTMLElement]|!compact,!reversed,#start,type', - 'object^[HTMLElement]|align,archive,border,code,codeBase,codeType,data,!declare,height,#hspace,name,standby,type,useMap,#vspace,width', - 'optgroup^[HTMLElement]|!disabled,label', - 'option^[HTMLElement]|!defaultSelected,!disabled,label,!selected,text,value', - 'output^[HTMLElement]|defaultValue,%htmlFor,name,value', - 'p^[HTMLElement]|align', - 'param^[HTMLElement]|name,type,value,valueType', - 'picture^[HTMLElement]|', - 'pre^[HTMLElement]|#width', - 'progress^[HTMLElement]|#max,#value', - 'q,blockquote,cite^[HTMLElement]|', - 'script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,src,text,type', - 'select^[HTMLElement]|!autofocus,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value', - 'shadow^[HTMLElement]|', - 'slot^[HTMLElement]|name', - 'source^[HTMLElement]|media,sizes,src,srcset,type', - 'span^[HTMLElement]|', - 'style^[HTMLElement]|!disabled,media,type', - 'caption^[HTMLElement]|align', - 'th,td^[HTMLElement]|abbr,align,axis,bgColor,ch,chOff,#colSpan,headers,height,!noWrap,#rowSpan,scope,vAlign,width', - 'col,colgroup^[HTMLElement]|align,ch,chOff,#span,vAlign,width', - 'table^[HTMLElement]|align,bgColor,border,%caption,cellPadding,cellSpacing,frame,rules,summary,%tFoot,%tHead,width', - 'tr^[HTMLElement]|align,bgColor,ch,chOff,vAlign', - 'tfoot,thead,tbody^[HTMLElement]|align,ch,chOff,vAlign', - 'template^[HTMLElement]|', - 'textarea^[HTMLElement]|autocapitalize,!autofocus,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap', - 'title^[HTMLElement]|text', - 'track^[HTMLElement]|!default,kind,label,src,srclang', - 'ul^[HTMLElement]|!compact,type', - 'unknown^[HTMLElement]|', - 'video^media|#height,poster,#width', - ':svg:a^:svg:graphics|', - ':svg:animate^:svg:animation|', - ':svg:animateMotion^:svg:animation|', - ':svg:animateTransform^:svg:animation|', - ':svg:circle^:svg:geometry|', - ':svg:clipPath^:svg:graphics|', - ':svg:defs^:svg:graphics|', - ':svg:desc^:svg:|', - ':svg:discard^:svg:|', - ':svg:ellipse^:svg:geometry|', - ':svg:feBlend^:svg:|', - ':svg:feColorMatrix^:svg:|', - ':svg:feComponentTransfer^:svg:|', - ':svg:feComposite^:svg:|', - ':svg:feConvolveMatrix^:svg:|', - ':svg:feDiffuseLighting^:svg:|', - ':svg:feDisplacementMap^:svg:|', - ':svg:feDistantLight^:svg:|', - ':svg:feDropShadow^:svg:|', - ':svg:feFlood^:svg:|', - ':svg:feFuncA^:svg:componentTransferFunction|', - ':svg:feFuncB^:svg:componentTransferFunction|', - ':svg:feFuncG^:svg:componentTransferFunction|', - ':svg:feFuncR^:svg:componentTransferFunction|', - ':svg:feGaussianBlur^:svg:|', - ':svg:feImage^:svg:|', - ':svg:feMerge^:svg:|', - ':svg:feMergeNode^:svg:|', - ':svg:feMorphology^:svg:|', - ':svg:feOffset^:svg:|', - ':svg:fePointLight^:svg:|', - ':svg:feSpecularLighting^:svg:|', - ':svg:feSpotLight^:svg:|', - ':svg:feTile^:svg:|', - ':svg:feTurbulence^:svg:|', - ':svg:filter^:svg:|', - ':svg:foreignObject^:svg:graphics|', - ':svg:g^:svg:graphics|', - ':svg:image^:svg:graphics|', - ':svg:line^:svg:geometry|', - ':svg:linearGradient^:svg:gradient|', - ':svg:mpath^:svg:|', - ':svg:marker^:svg:|', - ':svg:mask^:svg:|', - ':svg:metadata^:svg:|', - ':svg:path^:svg:geometry|', - ':svg:pattern^:svg:|', - ':svg:polygon^:svg:geometry|', - ':svg:polyline^:svg:geometry|', - ':svg:radialGradient^:svg:gradient|', - ':svg:rect^:svg:geometry|', - ':svg:svg^:svg:graphics|#currentScale,#zoomAndPan', - ':svg:script^:svg:|type', - ':svg:set^:svg:animation|', - ':svg:stop^:svg:|', - ':svg:style^:svg:|!disabled,media,title,type', - ':svg:switch^:svg:graphics|', - ':svg:symbol^:svg:|', - ':svg:tspan^:svg:textPositioning|', - ':svg:text^:svg:textPositioning|', - ':svg:textPath^:svg:textContent|', - ':svg:title^:svg:|', - ':svg:use^:svg:graphics|', - ':svg:view^:svg:|#zoomAndPan', - 'data^[HTMLElement]|value', - 'keygen^[HTMLElement]|!autofocus,challenge,!disabled,form,keytype,name', - 'menuitem^[HTMLElement]|type,label,icon,!disabled,!checked,radiogroup,!default', - 'summary^[HTMLElement]|', - 'time^[HTMLElement]|dateTime', - ':svg:cursor^:svg:|', -]; -var _ATTR_TO_PROP = { - 'class': 'className', - 'for': 'htmlFor', - 'formaction': 'formAction', - 'innerHtml': 'innerHTML', - 'readonly': 'readOnly', - 'tabindex': 'tabIndex', -}; -var DomElementSchemaRegistry = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(DomElementSchemaRegistry, _super); - function DomElementSchemaRegistry() { - var _this = _super.call(this) || this; - _this._schema = {}; - SCHEMA.forEach(function (encodedType) { - var type = {}; - var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(encodedType.split('|'), 2), strType = _a[0], strProperties = _a[1]; - var properties = strProperties.split(','); - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(strType.split('^'), 2), typeNames = _b[0], superName = _b[1]; - typeNames.split(',').forEach(function (tag) { return _this._schema[tag.toLowerCase()] = type; }); - var superType = superName && _this._schema[superName.toLowerCase()]; - if (superType) { - Object.keys(superType).forEach(function (prop) { type[prop] = superType[prop]; }); - } - properties.forEach(function (property) { - if (property.length > 0) { - switch (property[0]) { - case '*': - // We don't yet support events. - // If ever allowing to bind to events, GO THROUGH A SECURITY REVIEW, allowing events - // will - // almost certainly introduce bad XSS vulnerabilities. - // type[property.substring(1)] = EVENT; - break; - case '!': - type[property.substring(1)] = BOOLEAN; - break; - case '#': - type[property.substring(1)] = NUMBER; - break; - case '%': - type[property.substring(1)] = OBJECT; - break; - default: - type[property] = STRING; - } - } - }); - }); - return _this; - } - DomElementSchemaRegistry.prototype.hasProperty = function (tagName, propName, schemaMetas) { - if (schemaMetas.some(function (schema) { return schema.name === NO_ERRORS_SCHEMA.name; })) { - return true; - } - if (tagName.indexOf('-') > -1) { - if (isNgContainer(tagName) || isNgContent(tagName)) { - return false; - } - if (schemaMetas.some(function (schema) { return schema.name === CUSTOM_ELEMENTS_SCHEMA.name; })) { - // Can't tell now as we don't know which properties a custom element will get - // once it is instantiated - return true; - } - } - var elementProperties = this._schema[tagName.toLowerCase()] || this._schema['unknown']; - return !!elementProperties[propName]; - }; - DomElementSchemaRegistry.prototype.hasElement = function (tagName, schemaMetas) { - if (schemaMetas.some(function (schema) { return schema.name === NO_ERRORS_SCHEMA.name; })) { - return true; - } - if (tagName.indexOf('-') > -1) { - if (isNgContainer(tagName) || isNgContent(tagName)) { - return true; - } - if (schemaMetas.some(function (schema) { return schema.name === CUSTOM_ELEMENTS_SCHEMA.name; })) { - // Allow any custom elements - return true; - } - } - return !!this._schema[tagName.toLowerCase()]; - }; - /** - * securityContext returns the security context for the given property on the given DOM tag. - * - * Tag and property name are statically known and cannot change at runtime, i.e. it is not - * possible to bind a value into a changing attribute or tag name. - * - * The filtering is white list based. All attributes in the schema above are assumed to have the - * 'NONE' security context, i.e. that they are safe inert string values. Only specific well known - * attack vectors are assigned their appropriate context. - */ - DomElementSchemaRegistry.prototype.securityContext = function (tagName, propName, isAttribute) { - if (isAttribute) { - // NB: For security purposes, use the mapped property name, not the attribute name. - propName = this.getMappedPropName(propName); - } - // Make sure comparisons are case insensitive, so that case differences between attribute and - // property names do not have a security impact. - tagName = tagName.toLowerCase(); - propName = propName.toLowerCase(); - var ctx = SECURITY_SCHEMA()[tagName + '|' + propName]; - if (ctx) { - return ctx; - } - ctx = SECURITY_SCHEMA()['*|' + propName]; - return ctx ? ctx : SecurityContext.NONE; - }; - DomElementSchemaRegistry.prototype.getMappedPropName = function (propName) { return _ATTR_TO_PROP[propName] || propName; }; - DomElementSchemaRegistry.prototype.getDefaultComponentElementName = function () { return 'ng-component'; }; - DomElementSchemaRegistry.prototype.validateProperty = function (name) { - if (name.toLowerCase().startsWith('on')) { - var msg = "Binding to event property '" + name + "' is disallowed for security reasons, " + - ("please use (" + name.slice(2) + ")=...") + - ("\nIf '" + name + "' is a directive input, make sure the directive is imported by the") + - " current module."; - return { error: true, msg: msg }; - } - else { - return { error: false }; - } - }; - DomElementSchemaRegistry.prototype.validateAttribute = function (name) { - if (name.toLowerCase().startsWith('on')) { - var msg = "Binding to event attribute '" + name + "' is disallowed for security reasons, " + - ("please use (" + name.slice(2) + ")=..."); - return { error: true, msg: msg }; - } - else { - return { error: false }; - } - }; - DomElementSchemaRegistry.prototype.allKnownElementNames = function () { return Object.keys(this._schema); }; - DomElementSchemaRegistry.prototype.normalizeAnimationStyleProperty = function (propName) { - return dashCaseToCamelCase(propName); - }; - DomElementSchemaRegistry.prototype.normalizeAnimationStyleValue = function (camelCaseProp, userProvidedProp, val) { - var unit = ''; - var strVal = val.toString().trim(); - var errorMsg = null; - if (_isPixelDimensionStyle(camelCaseProp) && val !== 0 && val !== '0') { - if (typeof val === 'number') { - unit = 'px'; - } - else { - var valAndSuffixMatch = val.match(/^[+-]?[\d\.]+([a-z]*)$/); - if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) { - errorMsg = "Please provide a CSS unit value for " + userProvidedProp + ":" + val; - } - } - } - return { error: errorMsg, value: strVal + unit }; - }; - return DomElementSchemaRegistry; -}(ElementSchemaRegistry)); -function _isPixelDimensionStyle(prop) { - switch (prop) { - case 'width': - case 'height': - case 'minWidth': - case 'minHeight': - case 'maxWidth': - case 'maxHeight': - case 'left': - case 'top': - case 'bottom': - case 'right': - case 'fontSize': - case 'outlineWidth': - case 'outlineOffset': - case 'paddingTop': - case 'paddingLeft': - case 'paddingBottom': - case 'paddingRight': - case 'marginTop': - case 'marginLeft': - case 'marginBottom': - case 'marginRight': - case 'borderRadius': - case 'borderWidth': - case 'borderTopWidth': - case 'borderLeftWidth': - case 'borderRightWidth': - case 'borderBottomWidth': - case 'textIndent': - return true; - default: - return false; - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var PROPERTY_PARTS_SEPARATOR = '.'; -var ATTRIBUTE_PREFIX = 'attr'; -var CLASS_PREFIX = 'class'; -var STYLE_PREFIX = 'style'; -var ANIMATE_PROP_PREFIX = 'animate-'; -/** - * Parses bindings in templates and in the directive host area. - */ -var BindingParser = /** @class */ (function () { - function BindingParser(_exprParser, _interpolationConfig, _schemaRegistry, pipes, errors) { - this._exprParser = _exprParser; - this._interpolationConfig = _interpolationConfig; - this._schemaRegistry = _schemaRegistry; - this.errors = errors; - this.pipesByName = null; - this._usedPipes = new Map(); - // When the `pipes` parameter is `null`, do not check for used pipes - // This is used in IVY when we might not know the available pipes at compile time - if (pipes) { - var pipesByName_1 = new Map(); - pipes.forEach(function (pipe) { return pipesByName_1.set(pipe.name, pipe); }); - this.pipesByName = pipesByName_1; - } - } - BindingParser.prototype.getUsedPipes = function () { return Array.from(this._usedPipes.values()); }; - BindingParser.prototype.createBoundHostProperties = function (dirMeta, sourceSpan) { - var _this = this; - if (dirMeta.hostProperties) { - var boundProps_1 = []; - Object.keys(dirMeta.hostProperties).forEach(function (propName) { - var expression = dirMeta.hostProperties[propName]; - if (typeof expression === 'string') { - _this.parsePropertyBinding(propName, expression, true, sourceSpan, [], boundProps_1); - } - else { - _this._reportError("Value of the host property binding \"" + propName + "\" needs to be a string representing an expression but got \"" + expression + "\" (" + typeof expression + ")", sourceSpan); - } - }); - return boundProps_1; - } - return null; - }; - BindingParser.prototype.createDirectiveHostPropertyAsts = function (dirMeta, elementSelector, sourceSpan) { - var _this = this; - var boundProps = this.createBoundHostProperties(dirMeta, sourceSpan); - return boundProps && - boundProps.map(function (prop) { return _this.createBoundElementProperty(elementSelector, prop); }); - }; - BindingParser.prototype.createDirectiveHostEventAsts = function (dirMeta, sourceSpan) { - var _this = this; - if (dirMeta.hostListeners) { - var targetEvents_1 = []; - Object.keys(dirMeta.hostListeners).forEach(function (propName) { - var expression = dirMeta.hostListeners[propName]; - if (typeof expression === 'string') { - _this.parseEvent(propName, expression, sourceSpan, [], targetEvents_1); - } - else { - _this._reportError("Value of the host listener \"" + propName + "\" needs to be a string representing an expression but got \"" + expression + "\" (" + typeof expression + ")", sourceSpan); - } - }); - return targetEvents_1; - } - return null; - }; - BindingParser.prototype.parseInterpolation = function (value, sourceSpan) { - var sourceInfo = sourceSpan.start.toString(); - try { - var ast = this._exprParser.parseInterpolation(value, sourceInfo, this._interpolationConfig); - if (ast) - this._reportExpressionParserErrors(ast.errors, sourceSpan); - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError("" + e, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo); - } - }; - // Parse an inline template binding. ie `` - BindingParser.prototype.parseInlineTemplateBinding = function (tplKey, tplValue, sourceSpan, targetMatchableAttrs, targetProps, targetVars) { - var bindings = this._parseTemplateBindings(tplKey, tplValue, sourceSpan); - for (var i = 0; i < bindings.length; i++) { - var binding = bindings[i]; - if (binding.keyIsVar) { - targetVars.push(new ParsedVariable(binding.key, binding.name, sourceSpan)); - } - else if (binding.expression) { - this._parsePropertyAst(binding.key, binding.expression, sourceSpan, targetMatchableAttrs, targetProps); - } - else { - targetMatchableAttrs.push([binding.key, '']); - this.parseLiteralAttr(binding.key, null, sourceSpan, targetMatchableAttrs, targetProps); - } - } - }; - BindingParser.prototype._parseTemplateBindings = function (tplKey, tplValue, sourceSpan) { - var _this = this; - var sourceInfo = sourceSpan.start.toString(); - try { - var bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceInfo); - this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan); - bindingsResult.templateBindings.forEach(function (binding) { - if (binding.expression) { - _this._checkPipes(binding.expression, sourceSpan); - } - }); - bindingsResult.warnings.forEach(function (warning) { _this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING); }); - return bindingsResult.templateBindings; - } - catch (e) { - this._reportError("" + e, sourceSpan); - return []; - } - }; - BindingParser.prototype.parseLiteralAttr = function (name, value, sourceSpan, targetMatchableAttrs, targetProps) { - if (isAnimationLabel(name)) { - name = name.substring(1); - if (value) { - this._reportError("Assigning animation triggers via @prop=\"exp\" attributes with an expression is invalid." + - " Use property bindings (e.g. [@prop]=\"exp\") or use an attribute without a value (e.g. @prop) instead.", sourceSpan, ParseErrorLevel.ERROR); - } - this._parseAnimation(name, value, sourceSpan, targetMatchableAttrs, targetProps); - } - else { - targetProps.push(new ParsedProperty(name, this._exprParser.wrapLiteralPrimitive(value, ''), ParsedPropertyType.LITERAL_ATTR, sourceSpan)); - } - }; - BindingParser.prototype.parsePropertyBinding = function (name, expression, isHost, sourceSpan, targetMatchableAttrs, targetProps) { - var isAnimationProp = false; - if (name.startsWith(ANIMATE_PROP_PREFIX)) { - isAnimationProp = true; - name = name.substring(ANIMATE_PROP_PREFIX.length); - } - else if (isAnimationLabel(name)) { - isAnimationProp = true; - name = name.substring(1); - } - if (isAnimationProp) { - this._parseAnimation(name, expression, sourceSpan, targetMatchableAttrs, targetProps); - } - else { - this._parsePropertyAst(name, this._parseBinding(expression, isHost, sourceSpan), sourceSpan, targetMatchableAttrs, targetProps); - } - }; - BindingParser.prototype.parsePropertyInterpolation = function (name, value, sourceSpan, targetMatchableAttrs, targetProps) { - var expr = this.parseInterpolation(value, sourceSpan); - if (expr) { - this._parsePropertyAst(name, expr, sourceSpan, targetMatchableAttrs, targetProps); - return true; - } - return false; - }; - BindingParser.prototype._parsePropertyAst = function (name, ast, sourceSpan, targetMatchableAttrs, targetProps) { - targetMatchableAttrs.push([name, ast.source]); - targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.DEFAULT, sourceSpan)); - }; - BindingParser.prototype._parseAnimation = function (name, expression, sourceSpan, targetMatchableAttrs, targetProps) { - // This will occur when a @trigger is not paired with an expression. - // For animations it is valid to not have an expression since */void - // states will be applied by angular when the element is attached/detached - var ast = this._parseBinding(expression || 'undefined', false, sourceSpan); - targetMatchableAttrs.push([name, ast.source]); - targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.ANIMATION, sourceSpan)); - }; - BindingParser.prototype._parseBinding = function (value, isHostBinding, sourceSpan) { - var sourceInfo = (sourceSpan && sourceSpan.start || '(unknown)').toString(); - try { - var ast = isHostBinding ? - this._exprParser.parseSimpleBinding(value, sourceInfo, this._interpolationConfig) : - this._exprParser.parseBinding(value, sourceInfo, this._interpolationConfig); - if (ast) - this._reportExpressionParserErrors(ast.errors, sourceSpan); - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError("" + e, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo); - } - }; - BindingParser.prototype.createBoundElementProperty = function (elementSelector, boundProp) { - if (boundProp.isAnimation) { - return new BoundElementProperty(boundProp.name, 4 /* Animation */, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan); - } - var unit = null; - var bindingType = undefined; - var boundPropertyName = null; - var parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR); - var securityContexts = undefined; - // Check check for special cases (prefix style, attr, class) - if (parts.length > 1) { - if (parts[0] == ATTRIBUTE_PREFIX) { - boundPropertyName = parts[1]; - this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true); - securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true); - var nsSeparatorIdx = boundPropertyName.indexOf(':'); - if (nsSeparatorIdx > -1) { - var ns = boundPropertyName.substring(0, nsSeparatorIdx); - var name_1 = boundPropertyName.substring(nsSeparatorIdx + 1); - boundPropertyName = mergeNsAndName(ns, name_1); - } - bindingType = 1 /* Attribute */; - } - else if (parts[0] == CLASS_PREFIX) { - boundPropertyName = parts[1]; - bindingType = 2 /* Class */; - securityContexts = [SecurityContext.NONE]; - } - else if (parts[0] == STYLE_PREFIX) { - unit = parts.length > 2 ? parts[2] : null; - boundPropertyName = parts[1]; - bindingType = 3 /* Style */; - securityContexts = [SecurityContext.STYLE]; - } - } - // If not a special case, use the full property name - if (boundPropertyName === null) { - boundPropertyName = this._schemaRegistry.getMappedPropName(boundProp.name); - securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, false); - bindingType = 0 /* Property */; - this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, false); - } - return new BoundElementProperty(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan); - }; - BindingParser.prototype.parseEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) { - if (isAnimationLabel(name)) { - name = name.substr(1); - this._parseAnimationEvent(name, expression, sourceSpan, targetEvents); - } - else { - this._parseRegularEvent(name, expression, sourceSpan, targetMatchableAttrs, targetEvents); - } - }; - BindingParser.prototype._parseAnimationEvent = function (name, expression, sourceSpan, targetEvents) { - var matches = splitAtPeriod(name, [name, '']); - var eventName = matches[0]; - var phase = matches[1].toLowerCase(); - if (phase) { - switch (phase) { - case 'start': - case 'done': - var ast = this._parseAction(expression, sourceSpan); - targetEvents.push(new ParsedEvent(eventName, phase, 1 /* Animation */, ast, sourceSpan)); - break; - default: - this._reportError("The provided animation output phase value \"" + phase + "\" for \"@" + eventName + "\" is not supported (use start or done)", sourceSpan); - break; - } - } - else { - this._reportError("The animation trigger output event (@" + eventName + ") is missing its phase value name (start or done are currently supported)", sourceSpan); - } - }; - BindingParser.prototype._parseRegularEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) { - // long format: 'target: eventName' - var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(splitAtColon(name, [null, name]), 2), target = _a[0], eventName = _a[1]; - var ast = this._parseAction(expression, sourceSpan); - targetMatchableAttrs.push([name, ast.source]); - targetEvents.push(new ParsedEvent(eventName, target, 0 /* Regular */, ast, sourceSpan)); - // Don't detect directives for event names for now, - // so don't add the event name to the matchableAttrs - }; - BindingParser.prototype._parseAction = function (value, sourceSpan) { - var sourceInfo = (sourceSpan && sourceSpan.start || '(unknown').toString(); - try { - var ast = this._exprParser.parseAction(value, sourceInfo, this._interpolationConfig); - if (ast) { - this._reportExpressionParserErrors(ast.errors, sourceSpan); - } - if (!ast || ast.ast instanceof EmptyExpr) { - this._reportError("Empty expressions are not allowed", sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo); - } - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError("" + e, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo); - } - }; - BindingParser.prototype._reportError = function (message, sourceSpan, level) { - if (level === void 0) { level = ParseErrorLevel.ERROR; } - this.errors.push(new ParseError(sourceSpan, message, level)); - }; - BindingParser.prototype._reportExpressionParserErrors = function (errors, sourceSpan) { - var e_1, _a; - try { - for (var errors_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(errors), errors_1_1 = errors_1.next(); !errors_1_1.done; errors_1_1 = errors_1.next()) { - var error$$1 = errors_1_1.value; - this._reportError(error$$1.message, sourceSpan); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (errors_1_1 && !errors_1_1.done && (_a = errors_1.return)) _a.call(errors_1); - } - finally { if (e_1) throw e_1.error; } - } - }; - // Make sure all the used pipes are known in `this.pipesByName` - BindingParser.prototype._checkPipes = function (ast, sourceSpan) { - var _this = this; - if (ast && this.pipesByName) { - var collector = new PipeCollector(); - ast.visit(collector); - collector.pipes.forEach(function (ast, pipeName) { - var pipeMeta = _this.pipesByName.get(pipeName); - if (!pipeMeta) { - _this._reportError("The pipe '" + pipeName + "' could not be found", new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end))); - } - else { - _this._usedPipes.set(pipeName, pipeMeta); - } - }); - } - }; - /** - * @param propName the name of the property / attribute - * @param sourceSpan - * @param isAttr true when binding to an attribute - */ - BindingParser.prototype._validatePropertyOrAttributeName = function (propName, sourceSpan, isAttr) { - var report = isAttr ? this._schemaRegistry.validateAttribute(propName) : - this._schemaRegistry.validateProperty(propName); - if (report.error) { - this._reportError(report.msg, sourceSpan, ParseErrorLevel.ERROR); - } - }; - return BindingParser; -}()); -var PipeCollector = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(PipeCollector, _super); - function PipeCollector() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.pipes = new Map(); - return _this; - } - PipeCollector.prototype.visitPipe = function (ast, context) { - this.pipes.set(ast.name, ast); - ast.exp.visit(this); - this.visitAll(ast.args, context); - return null; - }; - return PipeCollector; -}(RecursiveAstVisitor$1)); -function isAnimationLabel(name) { - return name[0] == '@'; -} -function calcPossibleSecurityContexts(registry, selector, propName, isAttribute) { - var ctxs = []; - CssSelector.parse(selector).forEach(function (selector) { - var elementNames = selector.element ? [selector.element] : registry.allKnownElementNames(); - var notElementNames = new Set(selector.notSelectors.filter(function (selector) { return selector.isElementSelector(); }) - .map(function (selector) { return selector.element; })); - var possibleElementNames = elementNames.filter(function (elementName) { return !notElementNames.has(elementName); }); - ctxs.push.apply(ctxs, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(possibleElementNames.map(function (elementName) { return registry.securityContext(elementName, propName, isAttribute); }))); - }); - return ctxs.length === 0 ? [SecurityContext.NONE] : Array.from(new Set(ctxs)).sort(); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Text$1 = /** @class */ (function () { - function Text(value, sourceSpan) { - this.value = value; - this.sourceSpan = sourceSpan; - } - Text.prototype.visit = function (visitor) { return visitor.visitText(this); }; - return Text; -}()); -var BoundText = /** @class */ (function () { - function BoundText(value, sourceSpan) { - this.value = value; - this.sourceSpan = sourceSpan; - } - BoundText.prototype.visit = function (visitor) { return visitor.visitBoundText(this); }; - return BoundText; -}()); -var TextAttribute = /** @class */ (function () { - function TextAttribute(name, value, sourceSpan, valueSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - this.valueSpan = valueSpan; - } - TextAttribute.prototype.visit = function (visitor) { return visitor.visitTextAttribute(this); }; - return TextAttribute; -}()); -var BoundAttribute = /** @class */ (function () { - function BoundAttribute(name, type, securityContext, value, unit, sourceSpan) { - this.name = name; - this.type = type; - this.securityContext = securityContext; - this.value = value; - this.unit = unit; - this.sourceSpan = sourceSpan; - } - BoundAttribute.fromBoundElementProperty = function (prop) { - return new BoundAttribute(prop.name, prop.type, prop.securityContext, prop.value, prop.unit, prop.sourceSpan); - }; - BoundAttribute.prototype.visit = function (visitor) { return visitor.visitBoundAttribute(this); }; - return BoundAttribute; -}()); -var BoundEvent = /** @class */ (function () { - function BoundEvent(name, handler, target, phase, sourceSpan) { - this.name = name; - this.handler = handler; - this.target = target; - this.phase = phase; - this.sourceSpan = sourceSpan; - } - BoundEvent.fromParsedEvent = function (event) { - var target = event.type === 0 /* Regular */ ? event.targetOrPhase : null; - var phase = event.type === 1 /* Animation */ ? event.targetOrPhase : null; - return new BoundEvent(event.name, event.handler, target, phase, event.sourceSpan); - }; - BoundEvent.prototype.visit = function (visitor) { return visitor.visitBoundEvent(this); }; - return BoundEvent; -}()); -var Element$1 = /** @class */ (function () { - function Element(name, attributes, inputs, outputs, children, references, sourceSpan, startSourceSpan, endSourceSpan) { - this.name = name; - this.attributes = attributes; - this.inputs = inputs; - this.outputs = outputs; - this.children = children; - this.references = references; - this.sourceSpan = sourceSpan; - this.startSourceSpan = startSourceSpan; - this.endSourceSpan = endSourceSpan; - } - Element.prototype.visit = function (visitor) { return visitor.visitElement(this); }; - return Element; -}()); -var Template = /** @class */ (function () { - function Template(attributes, inputs, outputs, children, references, variables, sourceSpan, startSourceSpan, endSourceSpan) { - this.attributes = attributes; - this.inputs = inputs; - this.outputs = outputs; - this.children = children; - this.references = references; - this.variables = variables; - this.sourceSpan = sourceSpan; - this.startSourceSpan = startSourceSpan; - this.endSourceSpan = endSourceSpan; - } - Template.prototype.visit = function (visitor) { return visitor.visitTemplate(this); }; - return Template; -}()); -var Content = /** @class */ (function () { - function Content(selectorIndex, attributes, sourceSpan) { - this.selectorIndex = selectorIndex; - this.attributes = attributes; - this.sourceSpan = sourceSpan; - } - Content.prototype.visit = function (visitor) { return visitor.visitContent(this); }; - return Content; -}()); -var Variable = /** @class */ (function () { - function Variable(name, value, sourceSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - } - Variable.prototype.visit = function (visitor) { return visitor.visitVariable(this); }; - return Variable; -}()); -var Reference = /** @class */ (function () { - function Reference(name, value, sourceSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - } - Reference.prototype.visit = function (visitor) { return visitor.visitReference(this); }; - return Reference; -}()); -function visitAll$1(visitor, nodes) { - var e_1, _a, e_2, _b; - var result = []; - if (visitor.visit) { - try { - for (var nodes_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) { - var node = nodes_1_1.value; - var newNode = visitor.visit(node) || node.visit(visitor); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - try { - for (var nodes_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(nodes), nodes_2_1 = nodes_2.next(); !nodes_2_1.done; nodes_2_1 = nodes_2.next()) { - var node = nodes_2_1.value; - var newNode = node.visit(visitor); - if (newNode) { - result.push(newNode); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (nodes_2_1 && !nodes_2_1.done && (_b = nodes_2.return)) _b.call(nodes_2); - } - finally { if (e_2) throw e_2.error; } - } - } - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var StyleWithImports = /** @class */ (function () { - function StyleWithImports(style, styleUrls) { - this.style = style; - this.styleUrls = styleUrls; - } - return StyleWithImports; -}()); -function isStyleUrlResolvable(url) { - if (url == null || url.length === 0 || url[0] == '/') - return false; - var schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP); - return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset'; -} -/** - * Rewrites stylesheets by resolving and removing the @import urls that - * are either relative or don't have a `package:` scheme - */ -function extractStyleUrls(resolver, baseUrl, cssText) { - var foundUrls = []; - var modifiedCssText = cssText.replace(CSS_STRIPPABLE_COMMENT_REGEXP, '') - .replace(CSS_IMPORT_REGEXP, function () { - var m = []; - for (var _i = 0; _i < arguments.length; _i++) { - m[_i] = arguments[_i]; - } - var url = m[1] || m[2]; - if (!isStyleUrlResolvable(url)) { - // Do not attempt to resolve non-package absolute URLs with URI - // scheme - return m[0]; - } - foundUrls.push(resolver.resolve(baseUrl, url)); - return ''; - }); - return new StyleWithImports(modifiedCssText, foundUrls); -} -var CSS_IMPORT_REGEXP = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g; -var CSS_STRIPPABLE_COMMENT_REGEXP = /\/\*(?!#\s*(?:sourceURL|sourceMappingURL)=)[\s\S]+?\*\//g; -var URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/; - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var NG_CONTENT_SELECT_ATTR = 'select'; -var LINK_ELEMENT = 'link'; -var LINK_STYLE_REL_ATTR = 'rel'; -var LINK_STYLE_HREF_ATTR = 'href'; -var LINK_STYLE_REL_VALUE = 'stylesheet'; -var STYLE_ELEMENT = 'style'; -var SCRIPT_ELEMENT = 'script'; -var NG_NON_BINDABLE_ATTR = 'ngNonBindable'; -var NG_PROJECT_AS = 'ngProjectAs'; -function preparseElement(ast) { - var selectAttr = null; - var hrefAttr = null; - var relAttr = null; - var nonBindable = false; - var projectAs = ''; - ast.attrs.forEach(function (attr) { - var lcAttrName = attr.name.toLowerCase(); - if (lcAttrName == NG_CONTENT_SELECT_ATTR) { - selectAttr = attr.value; - } - else if (lcAttrName == LINK_STYLE_HREF_ATTR) { - hrefAttr = attr.value; - } - else if (lcAttrName == LINK_STYLE_REL_ATTR) { - relAttr = attr.value; - } - else if (attr.name == NG_NON_BINDABLE_ATTR) { - nonBindable = true; - } - else if (attr.name == NG_PROJECT_AS) { - if (attr.value.length > 0) { - projectAs = attr.value; - } - } - }); - selectAttr = normalizeNgContentSelect(selectAttr); - var nodeName = ast.name.toLowerCase(); - var type = PreparsedElementType.OTHER; - if (isNgContent(nodeName)) { - type = PreparsedElementType.NG_CONTENT; - } - else if (nodeName == STYLE_ELEMENT) { - type = PreparsedElementType.STYLE; - } - else if (nodeName == SCRIPT_ELEMENT) { - type = PreparsedElementType.SCRIPT; - } - else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) { - type = PreparsedElementType.STYLESHEET; - } - return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs); -} -var PreparsedElementType; -(function (PreparsedElementType) { - PreparsedElementType[PreparsedElementType["NG_CONTENT"] = 0] = "NG_CONTENT"; - PreparsedElementType[PreparsedElementType["STYLE"] = 1] = "STYLE"; - PreparsedElementType[PreparsedElementType["STYLESHEET"] = 2] = "STYLESHEET"; - PreparsedElementType[PreparsedElementType["SCRIPT"] = 3] = "SCRIPT"; - PreparsedElementType[PreparsedElementType["OTHER"] = 4] = "OTHER"; -})(PreparsedElementType || (PreparsedElementType = {})); -var PreparsedElement = /** @class */ (function () { - function PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs) { - this.type = type; - this.selectAttr = selectAttr; - this.hrefAttr = hrefAttr; - this.nonBindable = nonBindable; - this.projectAs = projectAs; - } - return PreparsedElement; -}()); -function normalizeNgContentSelect(selectAttr) { - if (selectAttr === null || selectAttr.length === 0) { - return '*'; - } - return selectAttr; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.+))|\[\(([^\)]+)\)\]|\[([^\]]+)\]|\(([^\)]+)\))$/; -// Group 1 = "bind-" -var KW_BIND_IDX = 1; -// Group 2 = "let-" -var KW_LET_IDX = 2; -// Group 3 = "ref-/#" -var KW_REF_IDX = 3; -// Group 4 = "on-" -var KW_ON_IDX = 4; -// Group 5 = "bindon-" -var KW_BINDON_IDX = 5; -// Group 6 = "@" -var KW_AT_IDX = 6; -// Group 7 = the identifier after "bind-", "let-", "ref-/#", "on-", "bindon-" or "@" -var IDENT_KW_IDX = 7; -// Group 8 = identifier inside [()] -var IDENT_BANANA_BOX_IDX = 8; -// Group 9 = identifier inside [] -var IDENT_PROPERTY_IDX = 9; -// Group 10 = identifier inside () -var IDENT_EVENT_IDX = 10; -var TEMPLATE_ATTR_PREFIX = '*'; -// Default selector used by `` if none specified -var DEFAULT_CONTENT_SELECTOR = '*'; -function htmlAstToRender3Ast(htmlNodes, bindingParser) { - var transformer = new HtmlAstToIvyAst(bindingParser); - var ivyNodes = visitAll(transformer, htmlNodes); - // Errors might originate in either the binding parser or the html to ivy transformer - var allErrors = bindingParser.errors.concat(transformer.errors); - var errors = allErrors.filter(function (e) { return e.level === ParseErrorLevel.ERROR; }); - if (errors.length > 0) { - var errorString = errors.join('\n'); - throw syntaxError("Template parse errors:\n" + errorString, errors); - } - return { - nodes: ivyNodes, - errors: allErrors, - ngContentSelectors: transformer.ngContentSelectors, - hasNgContent: transformer.hasNgContent, - }; -} -var HtmlAstToIvyAst = /** @class */ (function () { - function HtmlAstToIvyAst(bindingParser) { - this.bindingParser = bindingParser; - this.errors = []; - // Selectors for the `ng-content` tags. Only non `*` selectors are recorded here - this.ngContentSelectors = []; - // Any `` in the template ? - this.hasNgContent = false; - } - // HTML visitor - HtmlAstToIvyAst.prototype.visitElement = function (element) { - var _this = this; - var e_1, _a; - var preparsedElement = preparseElement(element); - if (preparsedElement.type === PreparsedElementType.SCRIPT || - preparsedElement.type === PreparsedElementType.STYLE) { - // Skipping