s.count from 1 to 2 mod 4, from 2 to 3
// mod 4, and from 3 to 0 mod 4, using random delays.  It sleeps a few seconds, ensuring
// many random timeouts by threads in cvStressIncLoop, because there is no thread
// incrementing s.count from 0 (which is 0 mod 4).  It then creates several
// threads using cvStressIncLoop() trying to increment s.count from 0 to 1 mod 4.
// This allows all the threads to run to completion, since there are equal
// numbers for each condition.
// Finally, it waits for all threads to exit.
func TestCVTimeoutStress(t *testing.T) {
	const loopCount = 50000
	const threadsPerValue = 5
	var s cvStressData

	s.mu.Lock()
	s.mu.AssertHeld()
	// Create threads trying to increment from 1, 2, and 3 mod 4.
	// They will continually hit their timeouts because s.count==0
	for i := 0; i != threadsPerValue; i++ {
		s.mu.AssertHeld()
		s.refs++
		go cvStressIncLoop(&s, 1, loopCount)
		s.refs++
		go cvStressIncLoop(&s, 2, loopCount)
		s.refs++
		go cvStressIncLoop(&s, 3, loopCount)
	}
	s.mu.AssertHeld()
	s.mu.Unlock()

	// Sleep a few seconds to cause many timeouts.
	const sleepSeconds = 3
	time.Sleep(sleepSeconds * time.Second)

	// Start the clock after the sleep above.
	start := time.Now()

	s.mu.Lock()
	s.mu.AssertHeld()

	// Check that approximately the right number of timeouts have occurred.
	// The 3 below is the three classes of thread produced before the Sleep().
	// The factor of 1/4 is to allow for randomness and slow test machines.
	expectedTimeouts := uint64(threadsPerValue * 3 * sleepSeconds * cvExpectedTimeoutsPerSec / 4)
	timeoutsSeen := s.timeouts
	if timeoutsSeen < expectedTimeouts {
		// Note, that this can potentially fail if the test is run on a
		// very loaded machine.
		t.Errorf("expected more than %d timeouts, got %d", expectedTimeouts, timeoutsSeen)
	}

	// Now create the threads that increment from 0 mod 4.   s.count will then be incremented.
	for i := 0; i != threadsPerValue; i++ {
		s.mu.AssertHeld()
		s.refs++
		go cvStressIncLoop(&s, 0, loopCount)
	}

	// Wait for threads to exit.
	s.mu.AssertHeld()
	for s.refs != 0 {
		s.refsIsZero.Wait(&s.mu)
	}
	s.mu.AssertHeld()
	if s.refs != 0 {
		t.Fatalf("s.refs == %d; expected 0 at end of TestCVWaitStress", s.refs)
	}

	s.mu.AssertHeld()
	s.mu.Unlock()
	timeTaken := time.Since(start)

	// Check that s.count has the right value.
	expectedCount := uint64(loopCount * threadsPerValue * 4)
	if s.count != expectedCount {
		t.Errorf("expected to increment s.count to %d, got %d", expectedCount, s.count)
	}

	// Some timeouts shoud have happened while the counts were being incremented.
	expectedTimeouts = timeoutsSeen + expectedTimeoutsDelta
	t.Logf("timeouts: %v, expected: %v, delta %v, time taken: %v, seen: %v", s.timeouts, expectedTimeouts, expectedTimeoutsDelta, timeTaken, timeoutsSeen)
	if timeTaken > 4*time.Second {
		// Looks like a slow test, let's just be content
		// with a small number of timeouts.
		expectedTimeouts = 1000
		t.Logf("slow test, adjusting expected timeouts accordingly: %v", expectedTime


devopsdays Amsterdam

            June 27 - 29, 2018

Pakhuis de Zwijger - Amsterdam

Piet Heinkade 179, 1019 HC Amsterdam

devopsdays is coming to Amsterdam!

Other Amsterdam Events
2013   2014   2015   2016   2017   2019

        Follow


 3y sig, 4:2y sig").osis()).toEqual("Rev.3-Rev.22,Rev.4.2-Rev.4.11");
		expect(p.parse("REV 3 Y SIG, 4:2 Y SIG").osis()).toEqual("Rev.3-Rev.22,Rev.4.2-Rev.4.11");
	});
	it("should handle translations (es)", () => {
		expect(p.parse("Lev 1 (DHH)").osis_and_translations()).toEqual([["Lev.1", "DHH"]]);
		expect(p.parse("lev 1 dhh").osis_and_translations()).toEqual([["Lev.1", "DHH"]]);
		expect(p.parse("Lev 1 (LBLA)").osis_and_translations()).toEqual([["Lev.1", "LBLA"]]);
		expect(p.parse("lev 1 lbla").osis_and_translations()).toEqual([["Lev.1", "LBLA"]]);
		expect(p.parse("Lev 1 (NBLH)").osis_and_translations()).toEqual([["Lev.1", "NBLH"]]);
		expect(p.parse("lev 1 nblh").osis_and_translations()).toEqual([["Lev.1", "NBLH"]]);
		expect(p.parse("Lev 1 (NTV)").osis_and_translations()).toEqual([["Lev.1", "NTV"]]);
		expect(p.parse("lev 1 ntv").osis_and_translations()).toEqual([["Lev.1", "NTV"]]);
		expect(p.parse("Lev 1 (NVI)").osis_and_translations()).toEqual([["Lev.1", "NVI"]]);
		expect(p.parse("lev 1 nvi").osis_and_translations()).toEqual([["Lev.1", "NVI"]]);
		expect(p.parse("Lev 1 (RVR)").osis_and_translations()).toEqual([["Lev.1", "RVR"]]);
		expect(p.parse("lev 1 rvr").osis_and_translations()).toEqual([["Lev.1", "RVR"]]);
		expect(p.parse("Lev 1 (RVR1960)").osis_and_translations()).toEqual([["Lev.1", "RVR1960"]]);
		expect(p.parse("lev 1 rvr1960").osis_and_translations()).toEqual([["Lev.1", "RVR1960"]]);
		expect(p.parse("Lev 1 (TLA)").osis_and_translations()).toEqual([["Lev.1", "TLA"]]);
		expect(p.parse("lev 1 tla").osis_and_translations()).toEqual([["Lev.1", "TLA"]]);
	});
	it("should handle book ranges (es)", () => {
		p.set_options({book_alone_strategy: "full", book_range_strategy: "include"});
		expect(p.parse("1.º á 3.º  Jaan").osis()).toEqual("1John.1-3John.1");
		expect(p.parse("1.º á 3.º  Jaun").osis()).toEqual("1John.1-3John.1");
		expect(p.parse("1.º á 3.º  Juan").osis()).toEqual("1John.1-3John.1");
		expect(p.parse("1.º á 3.º  Juun").osis()).toEqual("1John.1-3John.1");
	});
	it("should handle boundaries (es)", () => {
		p.set_options({book_alone_strategy: "full"});
		expect(p.parse("\u2014Matt\u2014").osis()).toEqual("Matt.1-Matt.28");
		expect(p.parse("\u201cMatt 1:1\u201d").osis()).toEqual("Matt.1.1");
	});
});
import "reflect-metadata"
import { Photo } from "./entities/Photo"
import { createConnection } from "typeorm"

createConnection({
    type: 'sqlite',
    database: `./db/photos.db`,
    entities: [
        Photo
    ],
    synchronize: true,
    logging: true
}).then ( async conntection => {

    let photo = new Photo()
    photo.name = "Me and Dogs"
    photo.description = "Sky, Cooper and I"
    photo.filename = "sky_and_cooper.jpgs"
    photo.views = 1;
    photo.isPublished =


str = left"}, {"name": "behavior", "types": ["ScrollBehavior"], "defaultValue": "auto", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "behavior: ScrollBehavior = auto"}], "doc": "
Scrolls an element or the page to an absolute position based on given coordinates.
\n
selector Selector of the element. If the selector is ${None} or ${Empty} the page itself is scrolled. To ensure an element is in view use Hover instead. See the Finding elements section for details about the selectors.
\n
vertical defines where to scroll vertically. It can be a positive number, like 300. It can be a percentage value of the absolute scrollable size, like 50%. It can be a string defining that top or the bottom of the scroll area. < top | bottom > Be aware that some pages do lazy loading and load more content once you scroll down. Bottom defines the current known bottom coordinate.
\n
horizontal defines where to scroll horizontally. Works same as vertical but defines < left | right > as start and end.
\n
behavior defines whether the scroll happens directly or it scrolls smoothly.
\n
Keyword uses strict mode, see Finding elements for more details about strict mode.
", "shortdoc": "Scrolls an element or the page to an absolute position based on given coordinates.", "tags": ["PageContent", "Setter"], "source": "/Users/kerkko/Code/robotframework-browser/Browser/keywords/interaction.py", "lineno": 441}, {"name": "Select Options By", "args": [{"name": "selector", "types": ["str"], "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "selector: str"}, {"name": "attribute", "types": ["SelectAttribute"], "defaultValue": null, "kind": "POSITIONAL_OR_NAMED", "required": true, "repr": "attribute: SelectAttribute"}, {"name": "values", "types": [], "defaultValue": null, "kind": "VAR_POSITIONAL", "required": false, "repr": "*values"}], "doc": "
Selects options from select element found by selector.
\n
selector Selector of the select tag. See the Finding elements section for details about the selectors.
\n
Matches based on the chosen attribute with list of values. Possible attributes to match options by: attribute
\n
Keyword uses strict mode, see Finding elements for more details about strict mode.
\n
If no values to select are passed will deselect options in element.
\n
Example:
\n
\nSelect Options By    label    select[name=preferred_channel]    Direct mail\nSelect Options By    value    select[name=interests]    males    females    others\nSelect Options By    index    select[name=possible_channels]    0    2\n<a href=\"#Select%20Options%20By\" class=\"name\"


 Gasket={gasket.bead_c2_mm}mm")
    print(f"   {'✅' if ferrule.c2_mm == gasket.bead_c2_mm else '❌'} Compatibles")

    print(f"   Seat Lip Width: Ferrule={ferrule.seat_lip_width_mm}mm, Gasket={gasket.seat_lip_width_mm}mm")
    print(f"   {'✅' if ferrule.seat_lip_width_mm == gasket.seat_lip_width_mm else '❌'} Compatibles")

def interactive_menu(dm):
    """Menú interactivo principal"""
    while True:
        print("\n" + "=" * 60)
        print("🎮 MENÚ INTERACTIVO")
        print("=" * 60)
        print("1. 📊 Mostrar resumen de datos")
        print("2. 📏 Ver tamaños disponibles")
        print("3. 🔍 Ver detalles de Ferrule")
        print("4. 🔍 Ver detalles de Gasket")
        print("5. 🔗 Verificar compatibilidad")
        print("6. 🧪 Ejecutar validación completa")
        print("0. 🚪 Salir")
        print("-" * 60)

        try:
            choice = input("Selecciona una opción (0-6): ").strip()

            if choice == '0':
                print("👋 ¡Hasta luego!")
                break
            elif choice == '1':
                show_summary(dm)
            elif choice == '2':
                show_available_sizes(dm)
            elif choice == '3':
                size = input("Ingresa el tamaño (ej: 3.0): ").strip()
                try:
                    size_float = float(size)
                    show_preset_details(dm, 'ferrule', size_float)
                except ValueError:
                    print("❌ Tamaño inválido")
            elif choice == '4':
                size = input("Ingresa el tamaño (ej: 3.0): ").strip()
                try:
                    size_float = float(size)
                    show_preset_details(dm, 'gasket', size_float)
                except ValueError:
                    print("❌ Tamaño inválido")
            elif choice == '5':
                size = input("Ingresa el tamaño (ej: 3.0): ").strip()
                try:
                    size_float = float(size)
                    show_compatibility_check(dm, size_float)
                except ValueError:
                    print("❌ Tamaño inválido")
            elif choice == '6':
                print("\n🧪 EJECUTANDO VALIDACIÓN COMPLETA...")
                integrity_results = dm.validate_data_integrity()
                for component, result in integrity_results.items():
                    status = "✅ VÁLIDO" if result['valid'] else "❌ INVÁLIDO"
                    print(f"   {component.capitalize()}: {status}")
                    if result['errors']:
                        for error in result['errors']:
                            print(f"      Error: {error}")
            else:
                print("❌ Opción inválida")

        except KeyboardInterrupt:
            print("\n👋 ¡Hasta luego!")
            break
        except Exception as e:
            print(f"❌ Error: {e}")

def main():
    """Función principal"""
    print_header()

    # Cargar datos
    dm = load_data()
    if not dm:
        print("❌ No se pudieron cargar los datos. Saliendo...")
        return

    # Mostrar resumen inicial
    show_summary(dm)

    # Iniciar menú interactivo
    interactive_menu(dm)

if __name__ == "__main__":
    main()


PU_CTRL

	rts

.proc palette_popslide_buffer
	tsx
	stx SP_TEMP
	tax
	txs
	; global bg color
	pla
	tax
	stx PPU_DATA
	; each palette
.repeat 8, I
	pla
	sta PPU_DATA
	pla
	sta PPU_DATA
	pla
	sta PPU_DATA
	.if I <> 7
	pla
	stx PPU_DATA
	.endif
.endrepeat

	ldx SP_TEMP
	txs
	rts
.endproc

;void __fastcall__ bank_spr(uint8_t n);

_bank_spr:

	and #1
	php
	lda <PPU_CTRL_VAR
	and #%11110111
	plp
	beq :+
		ora #%00001000
	:
	sta <PPU_CTRL_VAR

	rts

;void __fastcall__ bank_bg(uint8_t n);

;_bank_bg:

;	and #1
;	php
;	lda <PPU_CTRL_VAR
;	and #%11101111
;	plp
;	beq :+
;		ora #%00010000
;	:
;	sta <PPU_CTRL_VAR

;	rts

;void __fastcall__ vram_read(void *dst, uint16_t size);

__vram_read:

	; ax = size
	; sreg = dst

	sta <TEMP
	stx <TEMP+1

	; jsr popax
	; sta sreg
	; stx sreg+1

	lda PPU_DATA

	ldy #0

@1:

	lda PPU_DATA
	sta (sreg),y
	inc sreg
	bne @2
	inc sreg+1

@2:

	lda <TEMP
	bne @3
	dec <TEMP+1

@3:

	dec <TEMP
	lda <TEMP
	ora <TEMP+1
	bne @1

	rts

;void __fastcall__ vram_write(void *src, uint16_t size);

__vram_write:
	; ax = size
	; sreg = src

	sta <TEMP
	stx <TEMP+1

	; jsr popax
	; sta <sreg
	; stx <sreg+1

	ldy #0

@1:

	lda (sreg),y
	sta PPU_DATA
	inc <sreg
	bne @2
	inc <sreg+1

@2:

	lda <TEMP
	bne @3
	dec <TEMP+1

@3:

	dec <TEMP
	lda <TEMP
	ora <TEMP+1
	bne @1

	rts

;uint8_t __fastcall__ pad_poll(uint8_t pad);

_pad_poll:
	tay
pad_poll:	; Supply the arg in Y for the asm version
	ldx #3
@padPollPort:
	lda #1
	sta CTRL_PORT1
	sta <PAD_BUF-1,x
	lda #0
	sta CTRL_PORT1
	lda #8
	sta <TEMP
@padPollLoop:
	lda CTRL_PORT1,y
	lsr a
	rol <PAD_BUF-1,x
	bcc @padPollLoop
	dex
	bne @padPollPort
	lda <PAD_BUF
	cmp <PAD_BUF+1
	beq @done
	cmp <PAD_BUF+2
	beq @done
	lda <PAD_BUF+1
@done:
	ldx #0
	rts

; ;uint8_t __fastcall__ pad_trigger(uint8_t pad);

; _pad_trigger:


�ⴱⵉⵍⴰⵔⵓⵙⵜⵜⴰⴱⵍⵖⴰⵔⵉⵜⵜⴰⴱⵏⵖⴰⵍⵉⵜⵜⴰⵜⵛⵉⴽⵉⵜⵜⴰⵍⵉⵎⴰⵏⵜⵜⴰⴳⵔⵉⴳⵉ" +
			"ⵜⵜⴰⵏⴳⵍⵉⵣⵜⵜⴰⵙⴱⵏⵢⵓⵍⵉⵜⵜⴰⴼⵓⵔⵙⵉⵜⵜⴰⴼⵔⴰⵏⵙⵉⵙⵜⵜⴰⵀⴰⵡⵙⴰⵜⵜⴰⵀⵉⵏⴷⵉⵜⵜⴰⵀⵏⵖⴰⵔⵉⵜⵜⴰⵏⴷ" +
			"ⵓⵏⵉⵙⵉⵜⵜⵉⴳⴱⵓⵜⵜⴰⵟⴰⵍⵢⴰⵏⵜⵜⴰⵊⴰⴱⴱⵓⵏⵉⵜⵜⴰⵊⴰⴼⴰⵏⵉⵜⵜⴰⵅⵎⵉⵔⵜⵜⴰⴽⵓⵔⵉⵜⵜⴰⵎⴰⵍⴰⵡⵉⵜⵜⴰⴱ" +
			"ⵉⵔⵎⴰⵏⵉⵜⵜⴰⵏⵉⴱⴰⵍⵉⵜⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜⵜⴰⴱⵏⵊⴰⴱⵉⵜⵜⴰⴱⵓⵍⵓⵏⵉⵜⵜⴰⴱⵕⵟⵇⵉⵣⵜⵜⴰⵔⵓⵎⴰⵏⵉⵜⵜⴰⵔⵓ" +
			"ⵙⵉⵜⵜⴰⵔⵓⵡⴰⵏⴷⵉⵜⵜⴰⵙⵓⵎⴰⵍⵉⵜⵜⴰⵙⵡⵉⴷⵉⵜⵜⴰⵜⴰⵎⵉⵍⵜⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜⵜⴰⵜⵓⵔⴽⵉⵜⵜⵓⴽⵔⴰⵏⵉⵜⵜ" +
			"ⵓⵔⴷⵓⵜⵜⴰⴼⵉⵜⵏⴰⵎⵉⵜⵜⴰⵢⵔⵓⴱⴰⵜⵜⴰⵛⵉⵏⵡⵉⵜⵜⴰⵣⵓⵍⵓⵜⵜⴰⵛⵍⵃⵉⵜ",
		[]uint16{ // 510 elements
			// Entry 0 - 3F
			0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x002a, 0x002a,
			0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x005d, 0x0078,
			0x0078, 0x0078, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093,
			0x0093, 0x0093, 0x0093, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab,
			0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00db, 0x00f3, 0x00f3, 0x0111,
			0x0111, 0x0111, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0147,
			0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x015f,


F9D0 80108830 57C2000B */  bnel  $fp, $v0, .L80108860
/* B7F9D4 80108834 8EEF0000 */   lw    $t7, ($s7)
/* B7F9D8 80108838 8EEE0000 */  lw    $t6, ($s7)
/* B7F9DC 8010883C 861963DA */  lh    $t9, 0x63da($s0)
/* B7F9E0 80108840 85CF0B02 */  lh    $t7, 0xb02($t6)
/* B7F9E4 80108844 532F0006 */  beql  $t9, $t7, .L80108860
/* B7F9E8 80108848 8EEF0000 */   lw    $t7, ($s7)
/* B7F9EC 8010884C 861863D8 */  lh    $t8, 0x63d8($s0)
/* B7F9F0 80108850 26217FFF */  addiu $at, $s1, 0x7fff
/* B7F9F4 80108854 270E0020 */  addiu $t6, $t8, 0x20
/* B7F9F8 80108858 A42E63D9 */  sh    $t6, 0x63d9($at)
/* B7F9FC 8010885C 8EEF0000 */  lw    $t7, ($s7)
.L80108860:
/* B7FA00 80108860 861963DA */  lh    $t9, 0x63da($s0)
/* B7FA04 80108864 26217FFF */  addiu $at, $s1, 0x7fff
/* B7FA08 80108868 85F80B04 */  lh    $t8, 0xb04($t7)
/* B7FA0C 8010886C 03387021 */  addu  $t6, $t9, $t8
/* B7FA10 80108870 A42E63DB */  sh    $t6, 0x63db($at)
/* B7FA14 80108874 1000041D */  b     .L801098EC
/* B7FA18 80108878 966363D2 */   lhu   $v1, 0x63d2($s3)

glabel L8010887C
/* B7FA1C 8010887C 26420001 */  addiu $v0, $s2, 1
/* B7FA20 80108880 3047FFFF */  andi  $a3, $v0, 0xffff
/* B7FA24 80108884 02277821 */  addu  $t7, $s1, $a3
/* B7FA28 80108888 01F5C821 */  addu  $t9, $t7, $s5
/* B7FA2C 8010888C 93256306 */  lbu   $a1, 0x6306($t9)
/* B7FA30 80108890 34018000 */  li    $at, 32768
/* B7FA34 80108894 02C19821 */  addu  $s3, $s6, $at
/* B7FA38 80108898 30A5000F */  andi  $a1, $a1, 0xf
/* B7FA3C 8010889C 30A5FFFF */  andi  $a1, $a1, 0xffff
/* B7FA40 801088A0 3052FFFF */  andi  $s2, $v0, 0xffff
/* B7FA44 801088A4 0C041DB3 */  jal   func_801076CC
/* B7FA48 801088A8 02202025 */   move  $a0, $s1
/* B7FA4C 801088AC 24080009 */  li    $t0, 9
/* B7FA50 801088B0 2409000A */  li    $t1, 10
/* B7FA54 801088B4 240A000B */  li    $


UNRATE ≥ 4.4%
                            34%
                            66%
                            P(4.3%) = 43% ← Mode

                            Above 4.4%
                            UNRATE ≥ 4.5%
                            16%
                            84%
                            P(4.4%) = 18%

                    Market Distribution Analysis:

                        The market assigns 43% probability to 4.3%, making it the modal (most likely)
                        outcome. This aligns closely with the August actual of 4.3% and suggests market expects stability. Only 34% expect
                        deterioration to ≥4.4%, while 23% expect improvement to ≤4.2%.

Enhanced Market Sentiment Calculation

                            Position-weighted probability with time decay and liquidity adjustment:

P(UNRATE > τ | t) = Σᵢ [wᵢ(t) × exp(-λ×age_i) × confidence_i × I[position_i > τ]] / Σᵢ [wᵢ(t) × exp(-λ×age_i)]

                                where:

                                • λ = 0.05 (decay parameter)

                                • confidence_i = 1 - |spread_i/mid_i| (liquidity penalty)

                                • age_i = days since position opened

MARKET CENTER (IMPLIED)

4.33%

Probability-weighted expectation

MODAL OUTCOME

4.3%

Most likely (43% probability)

STATISTICAL vs MARKET

Close Al


E,B=T.getExtension("OES_texture_float");if(A.float&&P>0){if(!B)throw new Error("gl-fbo: Context does not support floating point textures");z=T.FLOAT}else A.preferFloat&&P>0&&B&&(z=T.FLOAT);var Z=!0;"depth"in A&&(Z=!!A.depth);var D=!1;return"stencil"in A&&(D=!!A.stencil),new _(T,f,S,z,P,Z,D,C)};var n,r,c,l,u=null;function h(T){return[T.getParameter(T.FRAMEBUFFER_BINDING),T.getParameter(T.RENDERBUFFER_BINDING),T.getParameter(T.TEXTURE_BINDING_2D)]}function i(T,f){T.bindFramebuffer(T.FRAMEBUFFER,f[0]),T.bindRenderbuffer(T.RENDERBUFFER,f[1]),T.bindTexture(T.TEXTURE_2D,f[2])}function k(T){switch(T){case n:throw new Error("gl-fbo: Framebuffer unsupported");case r:throw new Error("gl-fbo: Framebuffer incomplete attachment");case c:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case l:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function m(T,f,S,A,C,O){if(!A)return null;var P=s(T,f,S,C,A);return P.magFilter=T.NEAREST,P.minFilter=T.NEAREST,P.mipSamples=1,P.bind(),T.framebufferTexture2D(T.FRAMEBUFFER,O,T.TEXTURE_2D,P.handle,0),P}function p(T,f,S,A,C){var O=T.createRenderbuffer();return T.bindRenderbuffer(T.RENDERBUFFER,O),T.renderbufferStorage(T.RENDERBUFFER,A,f,S),T.framebufferRenderbuffer(T.FRAMEBUFFER,C,T.RENDERBUFFER,O),O}function _(T,f,S,A,C,O,P,z){this.gl=T,this._shape=[0|f,0|S],this._destroyed=!1,this._ext=z,this.color=new Array(C);for(var B=0;B<C;++B)this.color[B]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=A,this._useDepth=O,this._useStencil=P;var Z=this,D=[0|f,0|S];Object.defineProperties(D,{0:{get:function(){return Z._shape[0]},set:function(G){return Z.width=G}},1:{get:function(){return Z._shape[1]},set:function(G){return Z.height=G}}}),this._shapeVector=D,function(G){var V=h(G.gl),j=G.gl,H=G.handle=j.createFramebuffer(),Y=G._shape[0],ne=G._shape[1],te=G.color.length,$=G._ext,X=G._useStencil,K=G._useDepth,Q=G._colorType;j.bindFramebuffer(j.FRAMEBUFFER,H);for(var oe=0;oe<te;++oe)G.color[oe]=m(j,Y,ne,Q,j.RGBA,j.COLOR_ATTACHMENT0+oe);te===0?(G._color_rb=p(j,Y,ne,j.RGBA4,j.COLOR_ATTACHMENT0),$&&$.drawBuffersWEBGL(u[0])):te>1&&$.drawBuffersWEBGL(u[te]);var ie=j.getExtension("WEBGL_depth_texture");ie?X?G.depth=m(j,Y,ne,ie.UNSIGNED_INT_24_8_WEBGL,j.DEPTH_STENCIL,j.DEPTH_STENCIL_ATTACHMENT):K&&(G.depth=m


� ℓᵢ'} {Ix : Type ℓᵢ} {Im : Type ℓᵢ'}
    {f : Ix → Im}
    {F : Im → Ob}
    (surj : is-surjective f)
    where
      cover-preserves-is-glb : ∀ {glb} → is-glb P F glb → is-glb P (F ⊙ f) glb
      cover-preserves-is-glb g .glb≤fam i = g .glb≤fam (f i)
      cover-preserves-is-glb g .greatest lb' le = g .greatest lb' λ i → ∥-∥-out! do
        (i' , p) ← surj i
        pure (≤-trans (le i') (≤-refl' (ap F p)))

      cover-preserves-glb : Glb P F → Glb P (F ⊙ f)
      cover-preserves-glb g .Glb.glb = _
      cover-preserves-glb g .Glb.has-glb = cover-preserves-is-glb (g .Glb.has-glb)

      cover-reflects-is-glb : ∀ {glb} → is-glb P (F ⊙ f) glb → is-glb P F glb
      cover-reflects-is-glb g .glb≤fam i = ∥-∥-out! do
        (y , p) ← surj i
        pure (≤-trans (g .glb≤fam y) (≤-refl' (ap F p)))
      cover-reflects-is-glb g .greatest lb' le = g .greatest lb' λ i → le (f i)

      cover-reflects-glb : Glb P (F ⊙ f) → Glb P F
      cover-reflects-glb g .Glb.glb = _
      cover-reflects-glb g .Glb.has-glb = cover-reflects-is-glb (g .Glb.has-glb)
```
-->

## As limits

If a poset $P$ has all greatest lower bounds of size $\kappa$, then
it is $\kappa$-[[complete|complete-category]] when [[viewed as a category|posets-as-categories]].

<!--
```agda
module _ {o ℓ} {P : Poset o ℓ} where
  open Poset P
```
-->

```agda
  glbs→complete
    : ∀ {oκ ℓκ}
    → (∀ {I : Type oκ} (k : I → Ob) → Glb P k)
    → is-complete oκ ℓκ (poset→category P)
  glbs→complete glbs K = to-limit (to-is-limit lim) where
    open make-is-limit
    module K = Functor K
    open Glb (glbs K.₀)

    lim : make-is-limit K glb
    lim .ψ = glb≤fam
    lim .commutes _ = prop!
    lim .universal eps _ = greatest _ eps
    lim .factors _ _ = prop!
    lim .unique _ _ _ _ = prop!
```
<!--
```agda
open import Cat.Displayed.Univalence.Thin
open import Cat.Displayed.Total
open import Cat.Functor.Adjoint
open import Cat.Prelude

open import Order.Diagram.Lub
open import Order.Base
```
-->

```agda
module Order.Instances.Discrete where
```

<!--
```agda
open Functor
open Poset
open _⊣_
open _=>_
```
-->

# Discrete orders {defines="discrete-partial-order"}

Every set $A$ can be turned into a [[poset]] by defining $x \le y$ to
be $x = y


        + "\u1d78\u1d78"
        + "\u1d9b\u1dbf"
        + "\u2071\u2071"
        + "\u207f\u207f"
        + "\u2090\u209c"
        + "\u2170\u217f"
        + "\u24d0\u24e9"
        + "\u2c7c\u2c7d"
        + "\ua69c\ua69d"
        + "\ua770\ua770"
        + "\ua7f8\ua7f9"
        + "\uab5c\uab5f",
    // Unicode 11.0 property value: {othermath}
    "\u005e\u005e"
        + "\u03d0\u03d2"
        + "\u03d5\u03d5"
        + "\u03f0\u03f1"
        + "\u03f4\u03f5"
        + "\u2016\u2016"
        + "\u2032\u2034"
        + "\u2040\u2040"
        + "\u2061\u2064"
        + "\u207d\u207e"
        + "\u208d\u208e"
        + "\u20d0\u20dc"
        + "\u20e1\u20e1"
        + "\u20e5\u20e6"
        + "\u20eb\u20ef"
        + "\u2102\u2102"
        + "\u2107\u2107"
        + "\u210a\u2113"
        + "\u2115\u2115"
        + "\u2119\u211d"
        + "\u2124\u2124"
        + "\u2128\u2129"
        + "\u212c\u212d"
        + "\u212f\u2131"
        + "\u2133\u2138"
        + "\u213c\u213f"
        + "\u2145\u2149"
        + "\u2195\u2199"
        + "\u219c\u219f"
        + "\u21a1\u21a2"
        + "\u21a4\u21a5"
        + "\u21a7\u21a7"
        + "\u21a9\u21ad"
        + "\u21b0\u21b1"
        + "\u21b6\u21b7"
        + "\u21bc\u21cd"
        + "\u21d0\u21d1"
        + "\u21d3\u21d3"
        + "\u21d5\u21db"
        + "\u21dd\u21dd"
        + "\u21e4\u21e5"
        + "\u2308\u230b"
        + "\u23b4\u23b5"
        + "\u23b7\u23b7"
        + "\u23d0\u23d0"
        + "\u23e2\u23e2"
        + "\u25a0\u25a1"
        + "\u25ae\u25b6"
        + "\u25bc\u25c0"
        + "\u25c6\u25c7"
        + "\u25ca\u25cb"
        + "\u25cf\u25d3"
        + "\u25e2\u25e2"
        + "\u25e4\u25e4"
        + "\u25e7\u25ec"
        + "\u2605\u2606"
        + "\u2640\u2640"
        + "\u2642\u2642"
        + "\u2660\u2663"
        + "\u266d\u266e"
        + "\u27c5\u27c6"
        + "\u27e6\u27ef"
        + "\u2983\u2998"
        + "\u29d8\u29db"
        + "\u29fc\u29fd"
        + "\ufe61\ufe61"


terial .cm-string-2 {
  color: #f07178;
}

.cm-s-material .cm-comment {
  color: #546E7A;
}

.cm-s-material .cm-variable {
  color: #f07178;
}

.cm-s-material .cm-tag {
  color: #FF5370;
}

.cm-s-material .cm-meta {
  color: #FFCB6B;
}

.cm-s-material .cm-attribute {
  color: #C792EA;
}

.cm-s-material .cm-property {
  color: #C792EA;
}

.cm-s-material .cm-qualifier {
  color: #DECB6B;
}

.cm-s-material .cm-variable-3,
.cm-s-material .cm-type {
  color: #DECB6B;
}

.cm-s-material .cm-error {
  color: rgba(255, 255, 255, 1.0);
  background-color: #FF5370;
}

.cm-s-material .CodeMirror-matchingbracket {
  text-decoration: underline;
  color: white !important;
}
/* Based on arcticicestudio's Nord theme */
/* https://github.com/arcticicestudio/nord */

.cm-s-nord.CodeMirror { background: #2e3440; color: #d8dee9; }
.cm-s-nord div.CodeMirror-selected { background: #434c5e; }
.cm-s-nord .CodeMirror-line::selection, .cm-s-nord .CodeMirror-line > span::selection, .cm-s-nord .CodeMirror-line > span > span::selection { background: #3b4252; }
.cm-s-nord .CodeMirror-line::-moz-selection, .cm-s-nord .CodeMirror-line > span::-moz-selection, .cm-s-nord .CodeMirror-line > span > span::-moz-selection { background: #3b4252; }
.cm-s-nord .CodeMirror-gutters { background: #2e3440; border-right: 0px; }
.cm-s-nord .CodeMirror-guttermarker { color: #4c566a; }
.cm-s-nord .CodeMirror-guttermarker-subtle { color: #4c566a; }
.cm-s-nord .CodeMirror-linenumber { color: #4c566a; }
.cm-s-nord .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }

.cm-s-nord span.cm-comment { color: #4c566a; }
.cm-s-nord span.cm-atom { color: #b48ead; }
.cm-s-nord span.cm-number { color: #b48ead; }

.cm-s-nord span.cm-comment.cm-attribute { color: #97b757; }
.cm-s-nord span.cm-comment.cm-def { color: #bc9262; }
.cm-s-nord span.cm-comment.cm-tag { color: #bc6283; }
.cm-s-nord span.cm-comment.cm-type { color: #5998a6; }

.cm-s-nord span.cm-property, .cm-s-nord span.cm-attribute { color: #8FBCBB; }
.cm-s-nord span.cm-keyword { color: #81A1C1; }
.cm-s-nord span.cm-builtin { color: #81A1C1; }
.cm-s-nord span.cm-string { color: #A3BE8C; }

.cm-s-nord span.cm-variable { color: #d8dee9; }
.cm-s-nord span.cm-variable-2 { color: #d8dee9; }
.cm-s-nord span.cm-variable-3, .cm-s-nord span.cm-type { color:


checkSuccessCB = checkSuccessCB;
        HotUpdateUtils._checkFailCB = checkFailCB;
        HotUpdateUtils._progressCB = progressCB;
        HotUpdateUtils._finishedCB = finishedCB;

        if (!this._am.getLocalManifest() || !this._am.getLocalManifest().isLoaded()) {
            it.log("[hot_update]Failed to load local manifest ...");
            return;
        }
        HotUpdateUtils._am.setEventCallback(HotUpdateUtils.checkCb.bind(this));

        HotUpdateUtils._am.checkUpdate();
        HotUpdateUtils._updating = true;
    }

    /** 检查更新状态回调 */
    private static checkCb(event: any): void {
        it.log("[hot_update]Code: " + event.getEventCode());
        switch (event.getEventCode()) {
            // @ts-ignore
            case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
                it.log("[hot_update]No local manifest file found, hot update skipped.");
                if (HotUpdateUtils._checkFailCB) { HotUpdateUtils._checkFailCB(); }
                break;
            // @ts-ignore
            case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
            // @ts-ignore
            case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
                it.log("[hot_update]Fail to download manifest file, hot update skipped2.");
                if (HotUpdateUtils._checkFailCB) { HotUpdateUtils._checkFailCB(); }
                break;
            // @ts-ignore
            case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
                it.log("[hot_update]4:Already up to date with the latest remote version.");
                if (HotUpdateUtils._checkSuccessCB) { HotUpdateUtils._checkSuccessCB(HotUpdateEnum.UP_TO_DATE); }
                break;
            // @ts-ignore
            case jsb.EventAssetsManager.NEW_VERSION_FOUND:
                it.log("[hot_update]New version found, please try to update.");
                if (HotUpdateUtils._checkSuccessCB) { HotUpdateUtils._checkSuccessCB(HotUpdateEnum.NEW_VERSION); }
                break;
            default:
                it.log("[hot_update] checkCb default");
                return;
        }
        // HotUpdateUtils._am.setEventCallback(null);
        HotUpdateUtils._updating = false;
    }

    /** 开始更新 */
    public static startHotUpdate(): void {
        it.log("[hot_update]start to hot update.");
        HotUpdateUtils._updating = false;
        it.log(HotUpdateUtils._am, HotUpdateUtils._updating);
        if (HotUpdateUtils._am && !HotUpdateUtils._updating) {
            HotUpdateUtils._am.setEventCallback(HotUpdateUtils.updateCb.bind(this));
            if (!this._am.getLocalManifest() || !this._am.getLocalManifest().isLoaded()) {
                // this.panel.info.string = 'Failed to load local manifest ...';
                it.log("[hot_update]===>>> Failed to load local manifest ...");
                return;
            }
            // @ts-ignore
            it.log("[hot_update]this._am.getState() = ", this._am.getState(), jsb.AssetsManager.State.UNINITED);
            // @ts-ignore
            if (this._am.getState() === jsb.AssetsManager.State.UNINITED) {
                // @ts-ignore
                let manifest = new jsb.Manifest(HotUpdateUtils._customManifestStr, this._storagePath);
                this._am.loadLocalManifest(manifest, this._storagePath);
                it.log("[hot_update]Using custom manifest");
            }

            it.log("[hot_update]start to hot update.....");
            HotUpdateUtils._failCount = 0;
            HotUpdateUtils._am.update();
            HotUpdateUtils._updating = true;
        }
    }

    /** 更新cb */
    private static updateCb(event): void {
        it.log("


这个仓库已在 Python 3.6+、Flax 0.3.2+、PyTorch 1.3.1+ 和 TensorFlow 2.3+ 下经过测试。

你可以在[虚拟环境](https://docs.python.org/3/library/venv.html)中安装 🤗 Transformers。如果你还不熟悉 Python 的虚拟环境，请阅此[用户说明](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/)。

首先，用你打算使用的版本的 Python 创建一个虚拟环境并激活。

然后，你需要安装 Flax、PyTorch 或 TensorFlow 其中之一。关于在你使用的平台上安装这些框架，请参阅 [TensorFlow 安装页](https://www.tensorflow.org/install/), [PyTorch 安装页](https://pytorch.org/get-started/locally/#start-locally) 或 [Flax 安装页](https://github.com/google/flax#quick-install)。

当这些后端之一安装成功后， 🤗 Transformers 可依此安装：

```bash
pip install transformers
```

如果你想要试试用例或者想在正式发布前使用最新的开发中代码，你得[从源代码安装](https://huggingface.co/docs/transformers/installation#installing-from-source)。

### 使用 conda

自 Transformers 4.0.0 版始，我们有了一个 conda 频道： `huggingface`。

🤗 Transformers 可以通过 conda 依此安装：

```shell script
conda install -c huggingface transformers
```

要通过 conda 安装 Flax、PyTorch 或 TensorFlow 其中之一，请参阅它们各自安装页的说明。

## 模型架构

🤗 Transformers 支持的[**所有的模型检查点**](https://huggingface.co/models)由[用户](https://huggingface.co/users)和[组织](https://huggingface.co/organizations)上传，均与 huggingface.co [model hub](https://huggingface.co) 无缝整合。

目前的检查点数量： ![](https://img.shields.io/endpoint?url=https://huggingface.co/api/shields/models&color=brightgreen)

🤗 Transformers 目前支持如下的架构（模型概述请阅[这里](https://huggingface.co/docs/transformers/model_summary)）：

1. **[ALBERT](https://huggingface.co/docs/transformers/model_doc/albert)** (来自 Google Research and the Toyota Technological Institute at Chicago) 伴随论文 [ALBERT: A Lite BERT for Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942), 由 Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut 发布。
1. **[ALIGN](https://huggingface.co/docs/transformers/model_doc/align)** (来自 Google Research) 伴随论文 [Scaling Up Visual and Vision-Language Representation Learning With Noisy Text Supervision](https://arxiv.org/abs/2102.05918) 由 Chao Jia, Yinfei Yang, Ye Xia, Yi-Ting Chen, Zarana Parekh, Hieu Pham, Quoc V. Le, Yunhsuan Sung, Zhen Li, Tom Duerig 发布。
1. **[AltCLIP](https://huggingface.co/docs/transformers/model_doc/altclip)** (来自 BAAI) 伴随论文 [AltCLIP: Altering the Language Encoder in CLIP for Extended Language Capabilities](https://arxiv.org/abs/2211.06679) 由 Chen, Zhongzhi and Liu,


793L8.13481 20.5695C7.6765 20.9706 8.03808 21.7203 8.63724 21.6114L11.8927 21.0195C11.9636 21.0066 12.0364 21.0066 12.1073 21.0195L15.3628 21.6114C15.9619 21.7203 16.3235 20.9706 15.8652 20.5695L13.7049 18.6793C13.5747 18.5654 13.5 18.4008 13.5 18.2277V15.2685C13.5 14.8781 13.8668 14.5917 14.2455 14.6864L14.7029 14.8007M10.5 7.5V4.5C10.5 3.67157 11.1716 3 12 3V3C12.8284 3 13.5 3.67157 13.5 4.5V9.16745C13.5 9.37433 13.6066 9.56661 13.782 9.67625L21.218 14.3237C21.3934 14.4334 21.5 14.6257 21.5 14.8325V15.7315C21.5 16.1219 21.1332 16.4083 20.7545 16.3136L18.7493 15.8123" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 3L21 21" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>');
    -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,<svg width="24" height="24" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.88099 9.88688L2.782 14.3237C2.60657 14.4334 2.5 14.6257 2.5 14.8325V15.7315C2.5 16.1219 2.86683 16.4083 3.24552 16.3136L9.75448 14.6864C10.1332 14.5917 10.5 14.8781 10.5 15.2685V18.2277C10.5 18.4008 10.4253 18.5654 10.2951 18.6793L8.13481 20.5695C7.6765 20.9706 8.03808 21.7203 8.63724 21.6114L11.8927 21.0195C11.9636 21.0066 12.0364 21.0066 12.1073 21.0195L15.3628 21.6114C15.9619 21.7203 16.3235 20.9706 15.8652 20.5695L13.7049 18.6793C13.5747 18.5654 13.5 18.4008 13.5 18.2277V15.2685C13.5 14.8781 13.8668 14.5917 14.2455 14.6864L14.7029 14.8007M10.5 7.5V4.5C10.5 3.67157 11.1716 3 12 3V3C12.8284 3 13.5 3.67157 13.5 4.5V9.16745C13.5 9.37433 13.6066 9.56661 13.782 9.67625L21.218 14.3237C21.3934 14.4334 21.5 14.6257 21.5 14.8325V15.7315C21.5 16.1219 21.1332 16.4083 20.7545 16.3136L18.7493 15.8123" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 3L21 21" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>');
}
.iconoir-airplane-rotation::before {
    mask-image: url('data:image/svg+xml;charset=utf-8,<svg width="24" height="24" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.87868 14.1218C11.0503 15.2934 12.9497 15.2934 14.1213 14.1218C15.2929


ywords = COMPOUND_KEYWORDS_NOT_SUGGEST_TOGETHER[this] ?: return false
        return keywordToken in nextKeywords
    }

    private fun handleCompoundKeyword(
        position: PsiElement,
        keywordToken: KtKeywordToken,
        nextKeyword: KtKeywordToken?,
        isJvmModule: Boolean,
        prefixMatcher: PrefixMatcher,
        parserFilter: (KtKeywordToken) -> Boolean,
        consumer: (LookupElement) -> Unit
    ) {
        var keyword = keywordToken.value

        var applicableAsCompound = false
        if (nextKeyword != null) {
            fun PsiElement.isSpace() = this is PsiWhiteSpace && '\n' !in getText()

            var next = position.nextLeaf { !(it.isSpace() || it.text == "$") }?.text
            next = next?.removePrefix("$")

            if (keywordToken == SEALED_KEYWORD) {
                if (next in INCOMPATIBLE_KEYWORDS_AROUND_SEALED) return
                val prev = position.prevLeaf { !(it.isSpace() || it is PsiErrorElement) }?.text
                if (prev in INCOMPATIBLE_KEYWORDS_AROUND_SEALED) return
            }

            val nextIsNotYetPresent = keywordToken.getNextPossibleKeywords(position)?.none { it.value == next } == true
            if (nextIsNotYetPresent && keywordToken.avoidSuggestingWith(nextKeyword)) return

            if (nextIsNotYetPresent)
                keyword += " " + nextKeyword.value
            else
                applicableAsCompound = true
        }

        if (keywordToken == DYNAMIC_KEYWORD && isJvmModule) return // not supported for JVM

        if (keywordToken !in KEYWORDS_TO_IGNORE_PREFIX && !prefixMatcher.isStartMatch(keyword)) return

        if (!parserFilter(keywordToken)) return

        val constructText = KEYWORD_CONSTRUCTS[keywordToken]
        if (constructText != null && !applicableAsCompound) {
            val element = createKeywordConstructLookupElement(position.project, keyword, constructText)
            consumer(element)
        } else {
            if (listOf(CLASS_KEYWORD, OBJECT_KEYWORD, INTERFACE_KEYWORD).any { keyword.endsWith(it.value) }) {
                val topLevelClassName = getTopLevelClassName(position)
                if (topLevelClassName != null) {
                    if (keyword.startsWith(DATA_KEYWORD.value)) {
                        consumer(createKeywordConstructLookupElement(position.project, keyword, "$keyword $topLevelClassName(caret)"))
                    } else {
                        consumer(createLookupElementBuilder("$keyword $topLevelClassName", position))
                    }
                }
            }
            consumer(createLookupElementBuilder(keyword, position))
        }
    }

    private fun createLookupElementBuilder(
        keyword: String,
        position: PsiElement
    ): LookupElementBuilder {
        val isUseSiteAnnotationTarget = position.prevLeaf()?.node?.elementType == AT
        val insertHandler = when {
            isUseSiteAnnotationTarget -> UseSiteAnnotationTargetInsertHandler
            keyword in NO_SPACE_AFTER -> null
            else -> SpaceAfterInsertHandler
        }
        val element = LookupElementBuilder.create(KeywordLookupObject(), keyword).bold().withInsertHandler(insertHandler)
        return if (isUseSiteAnnotationTarget) {
            element.withPresentableText("$keyword:")
        } else {
            element
        }
    }

    private fun getTopLevelClassName(position: PsiElement): String? {
        if (position.parents.any { it is KtDeclaration }) return null
        val file = position.containingFile as? KtFile ?: return null
        val name = FileUtil.getNameWithoutExtension(file.name)


rgs)
		iceboundAegisStart = args.time
		self:Message(321368, "cyan")
		self:PlaySound(321368, "alert")
		-- this will not be recast if the shield is still up when it comes off CD, but in this scenario
		-- it will be cast almost immediately after the shield is finally removed.
		self:CDBar(321368, 24.3)
	end

	function mod:IceboundAegisRemoved(args)
		self:Message(321368, "green", CL.removed_after:format(args.spellName, args.time - iceboundAegisStart))
		self:PlaySound(321368, "info")
	end
end

do
	local function printTarget(self, name, guid)
		self:TargetMessage(320788, "orange", name, CL.casting:format(self:SpellName(320788)))
		self:PlaySound(320788, "alert", nil, name)
		if self:Me(guid) then
			self:Say(320788, nil, nil, "Frozen Binds")
		end
	end

	function mod:FrozenBinds(args)
		self:GetUnitTarget(printTarget, 0.4, args.sourceGUID)
		self:CDBar(args.spellId, 24.3)
	end
end

function mod:FrozenBindsApplied(args)
	-- doesn't apply if immune
	self:TargetMessage(args.spellId, "red", args.destName)
	self:PlaySound(args.spellId, "alarm", nil, args.destName)
	self:PrimaryIcon(args.spellId, args.destName)
end

function mod:FrozenBindsRemoved(args)
	self:PrimaryIcon(args.spellId)
end

function mod:DarkExile(args)
	self:TargetMessage(args.spellId, "yellow", args.destName)
	self:PlaySound(args.spellId, "long", nil, args.destName)
	self:CDBar(args.spellId, 35.2)
end

function mod:ChampionsBoonApplied(args)
	if self:Mythic() then
		-- Frigid Cold is removed 5s after gaining Champion's Boon, which drops Razorshard Ice
		self:TargetMessage(328181, "yellow", args.destName) -- Frigid Cold
		self:PlaySound(328181, "alert", nil, args.destName) -- Frigid Cold
		self:TargetBar(328181, 5.0, args.destName) -- Frigid Cold
		if self:Me(args.destGUID) then
			self:SayCountdown(328181, 5.0) -- Frigid Cold
		end
	end
end

function mod:FrigidColdRemoved(args)
	self:StopBar(args.spellId, args.destName)
	if self:Me(args.destGUID) then
		self:CancelSayCountdown(args.spellId)
	end
end


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

# Carregando o dataset
data = load_wine()
X = data.data
y = data.target

# Normalizando os dados
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Aplicando o K-means
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
kmeans.fit(X_scaled)
labels = kmeans.labels_

# Reduzindo a dimensionalidade para visualização
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plotando os resultados
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', edgecolor='k', s=50)
plt.title('Clusterização do Dataset de Vinhos com K-means')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.colorbar(scatter)
plt.show()

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

# Carregando o dataset
data = load_wine()
X = data.data
y = data.target
feature_names = data.feature_names

# Normalizando os dados
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Aplicando o K-means
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
kmeans.fit(X_scaled)

# Reduzindo a dimensionalidade para visualização com PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plotando os resultados do clustering
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans.labels_, cmap='viridis', edgecolor='k', s=50)
plt.title('Clusterização do Dataset de Vinhos com K-means')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.colorbar(scatter)
plt.show()

# Visualizando as cargas dos componentes principais
loadings = pca.components_.T
fig, ax = plt.subplots(figsize=(12, 8))
ax.bar(range(len(feature_names)), loadings[:, 0], label='PC1')
ax.bar(range(len(feature_names)), loadings[:, 1], bottom=loadings[:, 0], label='PC2')
plt.xticks(range(len(feature_names)), feature_names, rotation=90)
plt.ylabel('Cargas dos Componentes Principais')
plt.title('Contribuição das Variáveis aos Componentes Principais')
plt.legend()
plt.tight_layout()
plt.show()


_success;
	t_success = true;

	// Allocate a new section
	MCDeployCapsuleSection *t_section;
	t_section = nil;
	if (t_success)
		t_success = MCDeployCapsuleSectionCreate(p_type, t_section);

	// Now measure the length of the file
	if (t_success)
		t_success = MCDeployFileMeasure(p_file, t_section -> length);

	// Process success, or destroy if failure
	if (t_success)
	{
		// Link to the file
		t_section -> file = p_file;

		// Append to section list
		MCListPushBack(self -> sections, t_section);
	}
	else
		MCDeployCapsuleSectionDestroy(t_section);

	return t_success;
}

bool MCDeployCapsuleChecksum(MCDeployCapsuleRef self)
{
	MCAssert(self != nil);

	bool t_success;
	t_success = true;

	// Allocate a new section
	MCDeployCapsuleSection *t_section;
	t_section = nil;
	if (t_success)
		t_success = MCDeployCapsuleSectionCreate(kMCCapsuleSectionTypeDigest, t_section);

	// Link into the chain if successful, otherwise destroy
	if (t_success)
		MCListPushBack(self -> sections, t_section);
	else
		MCDeployCapsuleSectionDestroy(t_section);

	return t_success;
}

////////////////////////////////////////////////////////////////////////////////

// This holds state for a simple compressed data writing filter. The filter
// uses the zlib library to perform raw deflate. There is no need for anything
// beyong the raw level of compression since we know precisely what data we
// are expecting back *and* also digest/checksum the whole lot already.
//
struct MCDeployCapsuleFilterState
{
	// The target output file
	MCDeployFileRef file;

	// The target split file
	MCDeployFileRef spill_file;

	// The initial offset into the output file
	uint32_t start_offset;

	// The offset into the output file to write
	uint32_t offset;

	// The offset into the spill file we are
	uint32_t spill_offset;

	// The number of bytes we've written
	uint32_t amount;

	// The md5 state for computing the digest as we go along
	md5_state_t md5_stream;

	// The input/output buffers in use by zlib
	uint8_t *input;
	uint32_t input_capacity;

	uint8_t *output;
	uint32_t output_capacity;

	// The zlib state
	z_stream stream;
};

static void MCDeployCapsuleFilterInitialize(MCDeployCapsuleFilterState& self)
{
	memset(&self, 0, sizeof(MCDeployCapsuleFilterState));
}

static void MCDeployCapsuleFilterFinalize(MCDeployCapsuleFilterState& self)
{
	MCMemoryDeallocate(self . input);
	MCMemoryDeallocate(self . output);
	deflateEnd(&self . stream);
}

static bool MCDeployCapsuleFilterStart(MCDeployCapsuleFilterState& self, MCDeployFileRef p_output, MCDeployFileRef p_spill_output, uint32_t p_offset)
{
	memset(&self, 0, sizeof(MCDeployCapsuleFilterState));

	self . file = p_output;
	self . spill_file = p_spill_output;
	self . offset = p_offset;
	self . start_offset = p_offset;

	self . input_capacity = 65536;
	if (!MCMemoryAllocate(65536, self . input))
		return false;


er_name: '',
    description: '',
    follower_count: '', // 关注者
    got_digg_count: '', // 获得点赞
    article_count: '', // 文章数量
    got_view_count: '' // 文章被阅读
  }

  try {
    let res = await axios.get(
      `https://api.juejin.cn/user_api/v1/user/get?user_id=${user_id}`
    )

    let data = res.data.data
    result.user_id = data.user_id
    result.user_name = data.user_name
    result.description = data.description
    result.follower_count = data.follower_count
    result.got_digg_count = data.got_digg_count
    result.got_view_count = data.got_view_count

    // 获取文章数量
    let res2 = await axios.post('https://api.juejin.cn/content_api/v1/article/query_list', {
      user_id: user_id,
      cursor: "0",
      sort_type: 2
    })
    result.article_count = res2.data.count
  } catch (e) {
    console.error(e)
  }

  return result
}

module.exports = getJuejinInfo
const axios = require('axios');
const { mobileConfig: axiosConfig } = require('../common/utils');
const cheerio = require('cheerio');

async function getZhihuInfo(username) {
  let result = {
    name: 'username',
    description: 'No description',
    follower_count: 0,
    answer_count: 0,
    voteup_count: 0,
    thanked_count: 0,
    question_count: 0,
    articles_count: 0,
    favorited_count: 0,
    liked_count: 0
  };
  try {
    let res = await axios.get(
      `https://www.zhihu.com/api/v4/members/${username}`,
      axiosConfig
    );
    result.name = res.data.name;
    result.description = res.data.headline;
    res = await axios.get(
      `https://www.zhihu.com/people/${username}`,
      axiosConfig
    );
    let $ = cheerio.load(res.data);
    let list = $('.Profile-badgeText');
    let temp = list[2].children[0].data;
    let tempList = temp.split(' ');
    result.voteup_count = tempList[0];
    result.liked_count = tempList[3];
    result.favorited_count = tempList[6];
    result.follower_count = $('.Profile-follows')[0].children[0].children[0].data;
    result.follower_count = result.follower_count.trim();
  } catch (e) {
    console.error(e);
  }
  return result;
}

module.exports = getZhihuInfo;
const axios = require('axios');

async function getCodeforcesInfo(username) {
  let result = {
    name: username,
    Solved_for_all_time: 0,
    Solved_for_the_last_year: 0,
    In_a_row_for_the_last_year: 0,
    In_a_row_max: 0,
    Solved_for_the_last_month: 0,
    credit: 0
  };
  //name, Solved_for_all_time, Solved_for_the_last_year,
  //In_a_row_for_the_last_year, In_a_row_max, Solved_for_the_last_month, credit
  try {
    let res = await axios.get(
      `https://codeforces.com/profile/${username}`,
      axiosConfig
    );
    let $ = cheerio.load(res.data);
    let list =


  log.finer('Running command $executable ${arguments.join(' ')}');
  final res = Process.runSync(
    _resolveExecutable(executable),
    arguments,
    workingDirectory: workingDirectory,
    environment: environment,
    includeParentEnvironment: includeParentEnvironment,
    runInShell: runInShell,
    stderrEncoding: stderrEncoding,
    stdoutEncoding: stdoutEncoding,
  );
  if (res.exitCode != 0) {
    throw CommandFailedException(
      executable: executable,
      arguments: arguments,
      result: res,
    );
  } else {
    return res;
  }
}

class RustupNotFoundException implements Exception {
  @override
  String toString() {
    return [
      ' ',
      'rustup not found in PATH.',
      ' ',
      'Maybe you need to install Rust? It only takes a minute:',
      ' ',
      if (Platform.isWindows) 'https://www.rust-lang.org/tools/install',
      if (hasHomebrewRustInPath()) ...[
        '\$ brew unlink rust # Unlink homebrew Rust from PATH',
      ],
      if (!Platform.isWindows)
        "\$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh",
      ' ',
    ].join('\n');
  }

  static bool hasHomebrewRustInPath() {
    if (!Platform.isMacOS) {
      return false;
    }
    final envPath = Platform.environment['PATH'] ?? '';
    final paths = envPath.split(':');
    return paths.any((p) {
      return p.contains('homebrew') && File(path.join(p, 'rustc')).existsSync();
    });
  }
}

String _resolveExecutable(String executable) {
  if (executable == 'rustup') {
    final resolved = Rustup.executablePath();
    if (resolved != null) {
      return resolved;
    }
    throw RustupNotFoundException();
  } else {
    return executable;
  }
}
import 'package:flutter/material.dart';

import 'app_colors.dart';

/// Classe que concentra as configurações de tema do App.
abstract class AppTheme {
  static ThemeData appTheme = ThemeData.light().copyWith(

    // Tema dos botões
    //
    // Todos os botões (ElevatedButton) herdam esse tema.
    elevatedButtonTheme: ElevatedButtonThemeData(
        style: ButtonStyle(
          foregroundColor: WidgetStatePropertyAll(Colors.white),
          backgroundColor: WidgetStateColor.resolveWith((states) {
            if (states.contains(WidgetState.disabled)) {
              return Colors.grey;
            } else if (states.contains(WidgetState.pressed)) {
              return AppColors.secondary;
            }
            return AppColors.primary;
          }),
        )
    ),

    // Tema dos inputs
    //
    // Todos os os inputs (TextField, TextFormField, etc) herdam esse tema.
    inputDecorationTheme: InputDecorationTheme(
      labelStyle: TextStyle(
          color: Colors.grey,
          fontWeight: FontWeight.w500
      ),
      floatingLabelStyle: TextStyle(
          color: AppColors.primary,
          fontWeight: FontWeight.bold
      ),
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8.0),
        borderSide: BorderSide(color: Colors.grey.shade400, width: 1.0),
      ),
      focusedBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8.0),
        borderSide: BorderSide(color: AppColors.primary, width: 2.0),
      ),
      errorBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8.0),


: solid;
  color: #000;
  height: -moz-fit-content;
  height: fit-content;
  inset-inline-end: 0;
  inset-inline-start: 0;
  margin: auto;
  padding: 1em;
  position: absolute;
  width: -moz-fit-content;
  width: fit-content;
}
:where(dialog:not([open])) {
  display: none;
}
:where(details > summary:first-of-type) {
  display: list-item;
}
:where([aria-busy="true" i]) {
  cursor: progress;
}
:where([aria-controls]) {
  cursor: pointer;
}
:where([aria-disabled="true" i], [disabled]) {
  cursor: not-allowed;
}
:where([aria-hidden="false" i][hidden]) {
  display: inline;
  display: initial;
}
:where([aria-hidden="false" i][hidden]:not(:focus)) {
  clip: rect(0, 0, 0, 0);
  position: absolute;
}
nav li:before {
  display: block;
  height: 0;
}
ol,
ul {
  margin: 0;
  padding: 0;
}
@media (prefers-color-scheme: dark) {
  :root {
    --ym-background-color-primary-enabled-basic: #0d0d0d;
    --ym-background-color-primary-enabled-content: #121212;
    --ym-background-color-primary-enabled-popover: #1a1a1a;
    --ym-background-color-primary-enabled-overlay: rgba(0, 0, 0, 0.5);
    --ym-background-color-primary-enabled-vibe: linear-gradient(
      180deg,
      #000,
      #141414
    );
    --ym-background-color-primary-enabled-header: rgba(0, 0, 0, 0.5);
    --ym-background-color-primary-enabled-player: #141414;
    --ym-background-color-primary-enabled-tooltip: #0449c8;
    --ym-background-color-primary-enabled-shimmer: linear-gradient(
      90deg,
      rgba(41, 41, 41, 0.5) 40%,
      rgba(94, 94, 94, 0.3) 50%,
      rgba(41, 41, 41, 0.5) 60%
    );
    --ym-background-color-secondary-enabled-blur: #3d3d3d;
    --ym-logo-color-primary-enabled: #fff;
    --ym-logo-color-primary-variant: #fed42b;
    --ym-controls-color-primary-default-disabled: #333;
    --ym-controls-color-primary-default-enabled: #fc3;
    --ym-controls-color-primary-default-hovered: #ffd966;
    --ym-controls-color-primary-default-pressed: #fff2cc;
    --ym-controls-color-primary-default-focused_stroke: #997300;
    --ym-controls-color-primary-on_default-disabled: #4d4d4d;
    --ym-controls-color-primary-on_default-enabled: #000;
    --ym-controls-color-primary-outline-disabled: #333;
    --ym-controls-color-primary-outline-enabled: #333;
    --ym-controls-color-primary-outline-hovered: #4d4d4d;
    --ym-controls-color-primary-outline-hovered_stroke: #ffd966;
    --ym-controls-color-primary-outline-selected_stroke: #fc3;
    --ym-controls-color-primary-outline-pressed: #666;
    --ym-controls-color-primary-outline-focused_stroke: #997300;
    --ym-controls-color-primary-on_outline-disabled: #666;
    --ym-


       ISO 8601年份，以世紀作為十進制數字。
        對應於ISO週編號的4位數字年份
        ber（請參見%V）。具有相同的格式和值
        為%y，除非ISO週編號屬於
        到上一年或下一年
        代替。

%g      類似於%G，但沒有世紀，即為兩位數
        年（00-99）。

%h      等同於%b。

%H      使用24小時制的小時作為十進制數字
        （範圍為00到23）。

%I      使用12小時制的小時作為十進制數字
        （範圍為01到12）。

%j      一年中的天，以十進制數字表示（範圍001
        至366）。

%k      小時（24小時制）為十進制數字（範圍）
        0至23）；單個數字後跟一個空格。
        （另請參見%H。）

%l      以十進制數字表示的小時（12小時制）（範圍
        1至12）；單個數字後跟一個空格。
        （另請參見%I。）

%m      以十進制數字表示的月份（範圍為01到12）。

%M      分鐘，十進制數字（範圍為00到59）。

%n      換行符。

%O      修飾符：使用其他格式，請參見下文。

%p      根據給定的時間為" AM"或" PM"
        值，或當前的相應字符串
        語言環境。中午被視為" pm"，午夜被視為
        "上午"。

%P      類似於%p，但小寫：" am"或" pm"或錯誤
        當前語言環境的sponding字符串。

%r      以am或pm表示法的時間。在POSIX中
        語言環境，這相當於'%I：%M：%S%p'。

%R      以24小時製表示的時間（%H：%M）。為一個
        版本（包括秒），請參見下面的%T。

%s      自紀元以來的秒數，即自
        1970-01-01 00:00:00 UTC。

%S      第二個十進制數字（範圍為00到61）。

%t      製表符。

%T      以24小時製表示的時間（%H：%M：%S）。

%u      星期幾，以十進製表示，範圍為1到7
        星期一是1。另請參閱%w。

%U      當前年份的星期數（


local Util = require('opus.util')

local kernel     = _G.kernel
local keyboard   = _G.device.keyboard
local multishell = _ENV.multishell

if multishell and multishell.getTabs then
	-- restart tab
	keyboard.addHotkey('control-backspace', function()
		local tab = kernel.getFocused()
		if tab and not tab.noTerminate then
			multishell.terminate(tab.uid)
			multishell.openTab(tab.env, {
				path = tab.path,
				args = tab.args,
				focused = true,
			})
		end
	end)
end

-- next tab
keyboard.addHotkey('control-tab', funct


// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#ifndef CONNECTIONVISITOR_H
#define CONNECTIONVISITOR_H

#include <qmljs/qmljsdocument.h>
#include <qmljs/parser/qmljsastvisitor_p.h>
#include <qmljs/parser/qmljsast_p.h>

namespace QmlDesigner {

class ConnectionVisitor : public QmlJS::AST::Visitor
{
public:
    explicit ConnectionVisitor();

    bool visit(QmlJS::AST::TemplateLiteral *ast) override;
    bool visit(QmlJS::AST::StringLiteral *ast) override;
    bool visit(QmlJS::AST::NumericLiteral *ast) override;
    bool visit(QmlJS::AST::TrueLiteral *ast) override;
    bool visit(QmlJS::AST::FalseLiteral *ast) override;

    bool visit(QmlJS::AST::BinaryExpression *ast) override;
    bool visit(QmlJS::AST::CallExpression *ast) override;

    bool visit(QmlJS::AST::ArgumentList *ast) override;
    bool visit(QmlJS::AST::FunctionExpression *ast) override; // unused

    bool visit(QmlJS::AST::FieldMemberExpression *ast) override;
    bool visit(QmlJS::AST::IdentifierExpression *ast) override;

    void throwRecursionDepthError() override;

    const QList<QPair<QmlJS::AST::Node::Kind, QString>> &expression() const {
        return m_expression;
    }

private:
    QList<QPair<QmlJS::AST::Node::Kind, QString>> m_expression;
};

}

#endif //CONNECTIONVISITOR_H


String puzzlePlayedXTimes(int count) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: 'Изиграна $count пъти',
      one: 'Решавана $count пъти',
    );
    return '$_temp0';
  }

  @override
  String puzzleNbPointsBelowYourPuzzleRating(int count) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: '$count точки под Вашия рейтинг на задачите',
      one: 'Една точка под Вашия рейтинг на задачите',
    );
    return '$_temp0';
  }

  @override
  String puzzleNbPointsAboveYourPuzzleRating(int count) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: '$count точки над Вашия рейтинг на задачите',
      one: 'Една точка над Вашия рейтинг на задачите',
    );
    return '$_temp0';
  }

  @override
  String puzzlePuzzlesFoundInUserGames(int count, String param2) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: '$count задачи са намерени в игрите на $param2',
      one: 'Една задача е намерена в игрите на $param2',
    );
    return '$_temp0';
  }

  @override
  String puzzleNbPlayed(int count) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: '$count решени',
      one: '$count решена',
    );
    return '$_temp0';
  }

  @override
  String puzzleNbToReplay(int count) {
    String _temp0 = intl.Intl.pluralLogic(
      count,
      locale: localeName,
      other: '$count за повторение',
      one: '$count за повторение',
    );
    return '$_temp0';
  }

  @override
  String get puzzleThemeAdvancedPawn => 'Напреднала пешка';

  @override
  String get puzzleThemeAdvancedPawnDescription => 'Произвеждането на пешка, или заплахата за произвеждане, е ключова стратегия.';

  @override
  String get puzzleThemeAdvantage => 'Предимство';

  @override
  String get puzzleThemeAdvantageDescription => 'Възползване от шанс за решаващо предимство. (200cp ≤ eval ≤ 600cp)';

  @override
  String get puzzleThemeAnastasiaMate => 'Мат на Анастасия';

  @override
  String get puzzleThemeAnastasiaMateDescription => 'Кон и топ (или дама) се координират за да приклещят противниковия цар между края на дъската и друга фигура.';

  @override
  String get puzzleThemeArabianMate => 'Арабски мат';

  @override
  String get puzzleThemeArabianMateDescription => 'Кон и топ матират царя в ъгъла на полето.';

  @override
  String get puzzleThemeAttackingF2F7 => 'Атака на f2 или f7';

  @override
  String get puzzleThemeAttackingF2F7Description => 'Атака, фокусирана върху пешката на f2 или


private indexPrefix: string = 'bodyRow';
  // This variable will contains only the visible (rendered) rows not all the rows from data-source.
  private rowsByIndex: { [key: string]: FuiBodyRow } = {};

  storeRowElement(rowIndex: number, rowElement: FuiBodyRow): void {
    this.rowsByIndex[this.indexPrefix + rowIndex] = rowElement;
  }

  removeRowElement(rowIndex: number): void {
    delete this.rowsByIndex[this.indexPrefix + rowIndex];
  }

  getAllCellsForColumn(column: Column): FuiBodyCell[] {
    const eCells: FuiBodyCell[] = [];
    for (const key in this.rowsByIndex) {
      if (this.rowsByIndex.hasOwnProperty(key)) {
        const eCell = this.rowsByIndex[key].getCellForCol(column);
        if (eCell) {
          eCells.push(eCell);
        }
      }
    }
    return eCells;
  }

  /**
   * Return the row stored at the specified index.
   * @param index
   */
  getRowByIndex(index: number): FuiBodyRow {
    return this.rowsByIndex[this.indexPrefix + index];
  }
}
import { MetricNumerals } from "./src/Humanizer/Numbers/MetricNumerals"

declare global {
    interface Number {
        toMetric(): string
    }
    interface String {
        fromMetric(): number
    }
}

Number.prototype.toMetric = function (): string {
   return MetricNumerals.toMetric(this as number)
}

String.prototype.fromMetric = function (): number {
    return MetricNumerals.fromMetric(this as string)
}

import {Component} from '@angular/core';

/**
 * 组件之间的交互
 *
 * 父组件监听子组件的事件
 * 子组件暴露一个 EventEmitter 属性，
 * 当事件发生时，子组件利用该属性 emits(向上弹射)事件。
 * 父组件绑定到这个事件属性，并在事件发生时作出回应。
 *
 * 子组件的 EventEmitter 属性是一个输出属性，通常带有@Output 装饰器，就像在 VoterComponent 中看到的。
 */
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
}
import { useState } from 'react'
import {
  columnHover,
  columnRangeHover,
  ColumnRangeHoverOptions,
  columnResize,
  ColumnResizeOptions,
  HoverRange,
  sort,
  SortOptions,
  treeMode,
  TreeModeOptions,
} from './common-transforms'
import { SortItem } from './interfaces'

export function useColumnHoverTransform({
  hoverColor,
  defaultHoverColIndex = -1,
}: { hoverColor?: string; defaultHoverColIndex?: number } = {}) {
  const [hoverColIndex, onChangeHoverColIndex] = useState(defaultHoverColIndex)
  return columnHover({ hoverColor, hoverColIndex, onChangeHoverColIndex })
}

export function useColumnHoverRangeTransform({
  hoverColor,
  headerHoverColor,
  defaultHoverRange = { start: 0, end: 0 },
}: Omit<ColumnRangeHoverOptions, 'hoverRange' | 'onChangeHoverRange'> & { defaultHoverRange?: HoverRange } = {}) {
  const [hoverRange, onChangeHoverRange] = useState(defaultHoverRange)
  return columnRangeHover({ hoverColor, headerHoverColor, hoverRange, onChangeHoverRange })
}

export function useColumnResizeTransform({
  defaultSizes,
  ...others
}: Omit<ColumnResizeOptions, 'sizes' | 'onChangeSizes'> & { defaultSizes: number[] }) {
  const [sizes, onChangeSizes] = useState(defaultSizes)
  return columnResize({ sizes, onChangeSizes, ...others })
}

export function useSortTransform({
  defaultSorts


��品是否为零或负数
                    if (dishTotalCount > 0) {
                        let newCount: number = 0;
                        let newExcessCount: number = 0;
                        for (let num = 0; num < dishTotalCount; num++) {
                            // 非超额名额未空
                            if (unExcessCountNum > 0) {
                                newCount++;
                                unExcessCountNum--;
                            }
                            // 非超额名额已空
                            else {
                                newExcessCount++;
                                unExcessCountNum--;
                            }
                        }
                        // 更新菜品数量
                        this.findFromMetaDataByPath<CartDish>(detail.path).excessCount = newExcessCount;
                        this.findFromMetaDataByPath<CartDish>(detail.path).count = newCount;
                    }
                });
            });

        }
        // 依次修改数量 (普通菜品)
        else {
            Object.keys(fdReport.irMap).forEach((round: any) => {
                (fdReport.irMap[round] || []).forEach(detail => {
                    // 初始化
                    let dishTotalCount = detail.target.count + detail.target.excessCount;
                    // 更新菜品数量
                    this.findFromMetaDataByPath<CartDish>(detail.path).excessCount = 0;
                    this.findFromMetaDataByPath<CartDish>(detail.path).count = dishTotalCount;
                });
            });
        }

    }

    /**
     * 将当前轮次的所有同族菜品的非关键性字段重置
     */
    private resetFamilyDishesOtherFields(fdReport: FamilyDishesReport) {
        Object.keys(fdReport.irMap).forEach((round: any) => {
            ((fdReport.irMap[round]) || []).forEach(detail => {
                // $ init
                let targetDish = this.findFromMetaDataByPath<CartDish>(detail.path);

                // $ rebuild all price fields
                targetDish.totalPrice = targetDish.count * targetDish.price;
                targetDish.excessTotalPrice = targetDish.excessCount * targetDish.excessPrice;
                // $ rebuild all price fields with condiments
                targetDish.condimentsTotalPrice = 0;
                if (Array.isArray(targetDish.condiments) && targetDish.condiments.length > 0) {
                    targetDish.condiments.forEach(condiment => {
                        if (condiment.free !== true && condiment.price_1 > 0) targetDish.condimentsTotalPrice += (condiment.price_1 * (targetDish.count + targetDish.excessCount));
                    });
                }
                // $ rebuild all for view fields
                // rebuild `excessPriceAndCondimentsPriceForView` field
                let excessPriceString = targetDish.excessTotalPrice > 0 ? `Ext. ${targetDish.excessPrice.toFixed(2)} × ${targetDish.excessCount}` : '';
                let condimentsPriceString = targetDish.condimentsTotalPrice > 0 ? `Con. ${targetDish.condimentsTotalPrice.toFixed(2)}` : '';
                targetDish.excessPriceAndCondimentsPriceForView = `${excessPriceString} ${condimentsPriceString}`.tri


ull",
        "commit": "1563295600-48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19",
        "max": 1.089967824365,
        "mean": 1.072659919965,
        "median": 1.071875648365,
        "message": "Fix git config instruction in README\n",
        "min": 1.0640115243650001,
        "stddev": 0.010394210580992432,
        "system": 0.06245383499999999,
        "time": 1.089967824365,
        "user": 1.0702733050000002
      },
      {
        "command": "/tmp/chronologer/delta/executables/48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19 < /tmp/chronologer/delta/input.gitdiff > /dev/null",
        "commit": "1563295600-48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19",
        "max": 1.089967824365,
        "mean": 1.072659919965,
        "median": 1.071875648365,
        "message": "Fix git config instruction in README\n",
        "min": 1.0640115243650001,
        "stddev": 0.010394210580992432,
        "system": 0.06245383499999999,
        "time": 1.071875648365,
        "user": 1.0702733050000002
      },
      {
        "command": "/tmp/chronologer/delta/executables/48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19 < /tmp/chronologer/delta/input.gitdiff > /dev/null",
        "commit": "1563295600-48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19",
        "max": 1.089967824365,
        "mean": 1.072659919965,
        "median": 1.071875648365,
        "message": "Fix git config instruction in README\n",
        "min": 1.0640115243650001,
        "stddev": 0.010394210580992432,
        "system": 0.06245383499999999,
        "time": 1.0640115243650001,
        "user": 1.0702733050000002
      },
      {
        "command": "/tmp/chronologer/delta/executables/48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19 < /tmp/chronologer/delta/input.gitdiff > /dev/null",
        "commit": "1563295600-48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19",
        "max": 1.089967824365,
        "mean": 1.072659919965,
        "median": 1.071875648365,
        "message": "Fix git config instruction in README\n",
        "min": 1.0640115243650001,
        "stddev": 0.010394210580992432,
        "system": 0.06245383499999999,
        "time": 1.065104609365,
        "user": 1.0702733050000002
      },
      {
        "command": "/tmp/chronologer/delta/executables/48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19 < /tmp/chronologer/delta/input.gitdiff > /dev/null",
        "commit": "1563295600-48cef31c4a7b9e25280a8a7eaeac2a580b2ffa19",
        "max": 1.089967824365,
        "


resolve(dummyHike))
};

describe('HikesModel', () => {
  describe('with default provider', () => {
    it('should use the DiscHikesProvider', () => {
      const discProviderGetSpy = jest
        .spyOn(DiscHikesProvider, 'get')
        .mockImplementationOnce(() => Promise.resolve([]));
      const hikesModel = new HikesModel();
      hikesModel.get();
      expect(discProviderGetSpy).toHaveBeenCalled();
    });
  });

  describe('with given provider', () => {
    let hikesModel: HikesModel;
    beforeAll(() => {
      hikesModel = new HikesModel(dummyHikesProvider);
    });

    beforeEach(() => {
      jest.clearAllMocks();
    });

    describe('get', () => {
      it('should return the data from the HikesProvider', async () => {
        const hikes = await hikesModel.get();
        expect(dummyHikesProvider.get).toHaveBeenCalled();
        expect(hikes).toEqual([dummyHike]);
      });
    });

    describe('getById', () => {
      it('should return the data from the HikesProvider', async () => {
        const dummyId = 'ABCdef123';
        const hike = await hikesModel.getById(dummyId);
        expect(dummyHikesProvider.getById).toHaveBeenCalledWith(
          dummyId.toLowerCase()
        );
        expect(hike).toBe(dummyHike);
      });
    });
  });
});
class SceneController {
    private stage: egret.Stage; // 场景主容器

    // 页面场景
    private startScene: StartScene // 开始场景
    private playScene: PlayScene // 游戏场景
    private endScene: EndScenes // 结束场景

    public static sceneController: SceneController

    public static get instance() {
        if (!this.sceneController) {
            this.sceneController = new SceneController()
        }
        return this.sceneController
    }

    public constructor() {
        this.startScene = new StartScene()
        this.playScene = new PlayScene()
        this.endScene = new EndScenes()
    }

    // 设置存放游戏场景的主容器
    public setStage(stage: egret.Stage) {
        this.stage = stage
    }

    // 获取存放游戏场景的主容器
    public getState() {
        return this.stage
    }

    // 初始化游戏，显示开始游戏场景
    public static initGame() {
        let stage = this.instance.stage
        stage.removeChildren();
        // 添加开始场景
        stage.addChild(this.instance.startScene)
    }

    /**
     * 显示游戏场景
     */
    public static showPlayScene() {
        let stage = this.instance.stage
        stage.removeChildren();
        // 添加场景
        stage.addChild(this.instance.playScene)
    }

    /**
     * 显示游戏结束场景
     */
    public static showEndScene() {
        let stage = this.instance.stage
        stage.removeChildren();
        stage.addChild(this.instance.endScene)
    }

    // 添加场景
    public static addScene(scene: egret.DisplayObject) {
        let stage = this.instance.stage
        stage.addChild(scene);
    }

    // 替换场景
    public static replaceScene(scene: egret.DisplayObject) {
        let stage = this.instance.stage
        stage.removeChildren();
        stage.addChild(scene);
    }
}
import Options from "./options"
import Artist from "./artist"
import Cursor from "./cursor"

exp


olt12PaymentError {
		private UnknownRequiredFeatures(long ptr, bindings.LDKBolt12PaymentError.UnknownRequiredFeatures obj) {
			super(null, ptr);
		}
	}
	/**
	 * The invoice was valid for the corresponding [`PaymentId`], but sending the payment failed.
	 */
	public final static class SendingFailed extends Bolt12PaymentError {
		public final org.ldk.enums.RetryableSendFailure sending_failed;
		private SendingFailed(long ptr, bindings.LDKBolt12PaymentError.SendingFailed obj) {
			super(null, ptr);
			this.sending_failed = obj.sending_failed;
		}
	}
	long clone_ptr() {
		long ret = bindings.Bolt12PaymentError_clone_ptr(this.ptr);
		Reference.reachabilityFence(this);
		return ret;
	}

	/**
	 * Creates a copy of the Bolt12PaymentError
	 */
	public Bolt12PaymentError clone() {
		long ret = bindings.Bolt12PaymentError_clone(this.ptr);
		Reference.reachabilityFence(this);
		if (ret >= 0 && ret <= 4096) { return null; }
		org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
		if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(this); };
		return ret_hu_conv;
	}

	/**
	 * Utility method to constructs a new UnexpectedInvoice-variant Bolt12PaymentError
	 */
	public static Bolt12PaymentError unexpected_invoice() {
		long ret = bindings.Bolt12PaymentError_unexpected_invoice();
		if (ret >= 0 && ret <= 4096) { return null; }
		org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
		if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
		return ret_hu_conv;
	}

	/**
	 * Utility method to constructs a new DuplicateInvoice-variant Bolt12PaymentError
	 */
	public static Bolt12PaymentError duplicate_invoice() {
		long ret = bindings.Bolt12PaymentError_duplicate_invoice();
		if (ret >= 0 && ret <= 4096) { return null; }
		org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
		if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
		return ret_hu_conv;
	}

	/**
	 * Utility method to constructs a new UnknownRequiredFeatures-variant Bolt12PaymentError
	 */
	public static Bolt12PaymentError unknown_required_features() {
		long ret = bindings.Bolt12PaymentError_unknown_required_features();
		if (ret >= 0 && ret <= 4096) { return null; }
		org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);
		if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.add(ret_hu_conv); };
		return ret_hu_conv;
	}

	/**
	 * Utility method to constructs a new SendingFailed-variant Bolt12PaymentError
	 */
	public static Bolt12PaymentError sending_failed(org.ldk.enums.RetryableSendFailure a) {
		long ret = bindings.Bolt12PaymentError_sending_failed(a);
		Reference.reachabilityFence(a);
		if (ret >= 0 && ret <= 4096) { return null; }
		org.ldk.structs.Bolt12PaymentError ret_hu_conv = org.ldk.structs.Bolt12PaymentError.constr_from_ptr(ret);


 硅谷创业的鼻祖
	- 计算机、工作站的架构
		- 大多数还是兼容ibm
		- 丧失了 对于架构的把握
	- 架构师 在这个世界
		- 应该真没有几个人
- IBM
	- 历史最悠久的IBM
	- 在打卡、称重、人口统计时代
		- 就是 整个数据世界
	- 2004年12月
		- 将PC部门(thinkpad) 卖给联想
	- 2022年
		- IBM发布全球首个2nm芯片

- wintel 让pc市场 非常统一
	- 这种级别的垄断
		- 90年代达到巅峰

### GUI的崛起

- 还记得做全球概览的Stewart Brand 吗？

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20230916-1694834739681)

- 他辅助 Douglas Engelbart

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20230916-1694834671753)

- 制作出 所有演示之母

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20230916-1694834717152)

- 乔布斯 迅速模仿

### 微软

- 微软也去看了GUI演示

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20230916-1694835907686)

### wintel联盟时代

- 多年之后 比尔盖茨和安迪格鲁夫
	- 回顾起 wintel联盟的 起源
	- 不由得再次抚摸
		- 5150这台当时的机皇

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221021-1666362053323)

- 任何公司 只要有机会
	- 都想要 建立自己的标准
	- 专利 就是金钱
- 直到更新的标准出现

### 称霸一时

- PC一统天下
	- x86 架构几乎 统治了 整个世界
	- 成为整个 计算机领域的基础
		- 几乎是 一切软件的基础架构
		- 决定着上层系统、软件、应用的生态环境
		- 也决定着商业、投资、产业新闻、甚至生活的方方面面

![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20240531-1717118000401)

- 其他架构黯然离场
	- moto-6800
	- mos-6502

##


				result+= ' #' + (isNaN(parm) ? '????' : wordToHex(parm));
			else
			if(isREG)
				result+= ' ' + TVMRegister[regDst];
			else
			if(isVAR)
				result+= ' ' + 'V'+(isNaN(parm) ? '????' : wordToHex(parm))
			else
			if(op == TVMInstruction.BRA)
				result+= ' @' + wordToHex(opSrc & Flags.MSK_ALLREG);
		}

		return result;

	}

    disasm(prg: TCodeContainer, curIdx: number= 0, lineCount: number= -1): string {
        let codeLen= prg.CODE.length,
            result: string,
            opSrc: TVMInstruction,
            op: TVMInstruction,
            regDst: TVMRegister,
            regSrc: TVMRegister,
            isVAR: boolean,
            isREG: boolean,
            isIMM: boolean,
            noParms: boolean,
            mode2ope: boolean,
            parm: any;

        if(codeLen == 0)
            return 'EMPTY';

        if(curIdx<0)
            curIdx= 0;
        if(lineCount<0)
            lineCount= Number.MAX_SAFE_INTEGER;

        result= '';
        while(curIdx < codeLen && lineCount--) {

            opSrc= Number(prg.CODE[curIdx]);
            op= opSrc & Flags.MSK_OPC;
            regDst= opSrc & Flags.MSK_REG1;
            noParms= (opSrc & Flags.MSK_FLAGS) == 0;
            mode2ope= (opSrc & Flags.MSK_2OP) != 0;
            isVAR= (opSrc & Flags.MSK_IS_VAR) != 0;
            isREG= (opSrc & Flags.MSK_IS_REG) != 0;
            isIMM= (opSrc & Flags.MSK_2OP) ? (!isVAR && !isREG) : (isVAR && isREG);

            result+= wordToHex(curIdx) + ': ' + wordToHex(opSrc) + ' ';

            curIdx++;

			if(noParms || (!isIMM && isREG && !isVAR))
				result+= ''.padStart(4);
			else
				result+= wordToHex(prg.CODE[curIdx]);

			result+= ' ' + (mode2ope? '2':'.')+ (isREG?'R':'.')+ (isVAR?'V':'.')+ (isIMM?'#':'.');

            result+= ' ' + TVMInstruction[op];

            if(mode2ope) {

				if(isVAR && isREG) {
					parm= prg.CODE[curIdx++];
					result+= ' ' + this.varNameFromID(parm, prg.DBUG) + ', ' + TVMRegister[regDst];
				}
				else {
					result+= ' ' + TVMRegister[regDst] + ', ';
					if(isVAR || isIMM) {
						parm= prg.CODE[curIdx++];
						if(op == TVMInstruction.BZ) {
							result+= '@' + wordToHex(curIdx + parm);
						}
						else {
							result+= isVAR ? this.varNameFromID(parm, prg.DBUG) : '#'+parm;
							if(op == TVMInstruction.CAL) {
								regSrc= (<number>opSrc & Flags.MSK_REG2) >> 4;
								result+= `(${regSrc})`;
							}
						}
					}
					else {
						regSrc= (<number>opSrc & Flags.MSK_REG2) >> 4;
						result+= TVMRegister[regSrc];
					}
				}
            }
            else {
                if(isIMM)
                    result+= ' #' + prg.CODE[curIdx++];
                else
                if(isREG)
                    result+= ' ' + TVMRegister[regDst];
                else
                if(isVAR)
					result+= ' ' + this.varNameFromID(prg.CODE[curIdx++], prg.DBUG)
				else
				if(op == TVMInstruction.BRA)
                   	result+= ' @' + wordToHex(curIdx + (opSrc & Flags.MSK_ALLREG));
            }

            result+= "\n";
        }

        return result;
    }

}/*
 *  Copyright (C) 2017 OrionStar Technology Project
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *


ion1 = entityManager.persist(
                new Reservation("신청 내용1", Status.PENDING, mentoring1, mentee)
        );
        Reservation reservation2 = entityManager.persist(
                new Reservation("신청 내용2", Status.PENDING, mentoring2, mentee)
        );

        // 리뷰는 두 번째 예약에만 달림 → expected의 마지막 boolean = true
        entityManager.persist(new Review(4, "좋았습니다.", reservation2, mentee));

        List<ParticipatedReservationResponse> expected = List.of(
                new ParticipatedReservationResponse(
                        reservation1.getId(),
                        mentoring1.getId(),
                        mentoring1.getMentorName(),
                        profileImageOfMentor1.getUrl(),
                        reservation1.getCreatedAt().toLocalDate(),
                        reservation1.getContent(),
                        Status.PENDING.name(),
                        false
                ),
                new ParticipatedReservationResponse(
                        reservation2.getId(),
                        mentoring2.getId(),
                        mentoring2.getMentorName(),
                        null,
                        reservation2.getCreatedAt().toLocalDate(),
                        reservation2.getContent(),
                        Status.PENDING.name(),
                        true
                )
        );

        // when
        List<ParticipatedReservationResponse> actual =
                reservationService.findMemberReservations(mentee.getId());

        // then
        assertThat(actual)
                .usingRecursiveFieldByFieldElementComparator()
                .containsExactlyInAnyOrderElementsOf(expected);
    }

    @DisplayName("관리자는 예약의 상태를 변경할 수 있다")
    @CsvSource({
            "PENDING, APPROVED",
            "PENDING, REJECTED",
            "PENDING, COMPLETE",
            "APPROVED, PENDING",
            "APPROVED, REJECTED",
            "APPROVED, COMPLETE",
            "REJECTED, PENDING",
            "REJECTED, APPROVED",
            "REJECTED, COMPLETE",
            "COMPLETE, PENDING",
            "COMPLETE, APPROVED",
            "COMPLETE, REJECTED"
    })
    @ParameterizedTest
    void updateStatusWithAdminAuthorization(Status originalStatus, String newStatus) {
        // given
        Member admin = entityManager.persist(FixtureUtil.getTestAdmin());
        Member mentor = entityManager.persist(FixtureUtil.getTestMentor());
        Mentoring mentoring = entityManager.persist(FixtureUtil.getTestMentoring(mentor));
        Member mentee = entityManager.persist(FixtureUtil.getTestMentee());

        Reservation reservation = entityManager.persist(
                new Reservation("예약 내용", originalStatus, mentoring, mentee)
        );

        AdminReservationStatusUpdateDto dto =
                new AdminReservationStatusUpdateDto(admin.getId(), reservation.getId(), newStatus);

        // when
        reservationService.updateStatusWithAdminAuthorization(dto);
        entityManager.flush();
        entityManager.clear();

        // then
        Reservation actual = entityManager.find(Reservation.class, reservation.getId());
        assertThat(actual.getStatus()).isEqualTo(newStatus);
    }

    @DisplayName("관리자는 등록되어 있는 예약을 �


67 HER FACE

 as Alrik removes the veil.

 KAMALA

    I am for you Alrik of Valt.

 The colorless man kisses her on the lips...

68 PICARD

 stands away, watches... silently... controlled...

69 EXT. SPACE - THE ENTERPRISE (OPTICAL)

 moving at impulse.

70 INT. TRANSPORTER ROOM (OPTICAL)

 Briam, still weak, head bruised... enters with

    Picard... a Transporter Officer is on duty...

 BRIAM

    Your service to both our peoples

    is greatly appreciated, Captain...

 STAR TREK: "The Perfect Mate" - REV. 2/20/92 - ACT FIVE 54-56.

70 CONTINUED:

 PICARD

    Your preparation made the

    negotiations simple, Ambassador...

    and Kamala was able to guide me

    through the rituals...

 Picard helps Briam onto the transporter pad. A beat

    as he hesitates to ask what has been on his mind...

 BRIAM

    I have to admit I'm curious...

 PICARD

    Curious?

 BRIAM

    I was chosen for this mission for

    a simple reason... I am two

    hundred years old. The

    temptations of a beautiful

    metamorph do not reach me so

    easily... and yet I would be lying

    if I were to claim, that even at

    my age, they did not reach me at

    all. But you... you had to work

    side by side with her for days...

    how could you resist her... ?

 PICARD

    (evenly)

    Ambassador, have a safe trip home.

 Briam reacts, all the more curious... frowns a

    curmudgeony old frown... looks at the captain...

 BRIAM

    Energize.

 He DEMATERIALIZES. Off Picard's acknowledgement...

71 INT. PICARD'S QUARTERS

 Low lighting... as he enters... pauses once inside to

    feel himself alone... won't allow himself to stay with

    that... moves to the replicator...

 PICARD

    Earl Grey. Hot.

 We hear the replicator... but stay on him as he moves

    to a bookshelf... and picks out a long book that looks

    interesting... studies it as he returns to the

    replicator, and takes his tea... he moves to an easy

    chair and places the tea on a side table... turns on

    the light, sits, opens the book... and reads a few

    words but his eyes leave the book and he leans back...

    thinking and as the book closes in his hands...

72 EXT. SPACE - THE ENTERPRISE (OPTICAL)

 Moves off into warp.

 FADE OUT.

 END OF ACT FIVE

 THE END


lta arg must be a number`);return}const o=window.getComputedStyle(document.documentElement);const r=parseInt(o.getPropertyValue("--jp-code-font-size"),10);if(!t.customStyles){t.customStyles={}}const l=((i=t["customStyles"]["fontSize"])!==null&&i!==void 0?i:m.baseConfiguration["customStyles"]["fontSize"])||r;t.customStyles.fontSize=l+s;return n.set(a,"editorConfig",t).catch((e=>{console.error(`Failed to set ${a}: ${e.message}`)}))},label:e=>{const t=Number(e["delta"]);if(Number.isNaN(t)){console.error(`${I.changeFontSize}: delta arg must be a number`)}if(t>0){return e.isMenu?r.__("Increase Text Editor Font Size"):r.__("Increase Font Size")}else{return e.isMenu?r.__("Decrease Text Editor Font Size"):r.__("Decrease Font Size")}}});e.addCommand(I.lineNumbers,{execute:async()=>{var e;t.lineNumbers=!((e=t.lineNumbers)!==null&&e!==void 0?e:m.baseConfiguration.lineNumbers);try{return await n.set(a,"editorConfig",t)}catch(i){console.error(`Failed to set ${a}: ${i.message}`)}},isEnabled:l,isToggled:()=>{var e;return(e=t.lineNumbers)!==null&&e!==void 0?e:m.baseConfiguration.lineNumbers},label:r.__("Show Line Numbers")});e.addCommand(I.currentLineNumbers,{label:r.__("Show Line Numbers"),caption:r.__("Show the line numbers for the current file."),execute:()=>{const e=d.currentWidget;if(!e){return}const t=!e.content.editor.getOption("lineNumbers");e.content.editor.setOption("lineNumbers",t)},isEnabled:l,isToggled:()=>{var e;const t=d.currentWidget;return(e=t===null||t===void 0?void 0:t.content.editor.getOption("lineNumbers"))!==null&&e!==void 0?e:false}});e.addCommand(I.lineWrap,{execute:async e=>{var i;t.lineWrap=(i=e["mode"])!==null&&i!==void 0?i:false;try{return await n.set(a,"editorConfig",t)}catch(s){console.error(`Failed to set ${a}: ${s.message}`)}},isEnabled:l,isToggled:e=>{var n,i;const s=(n=e["mode"])!==null&&n!==void 0?n:false;return s===((i=t.lineWrap)!==null&&i!==void 0?i:m.baseConfiguration.lineWrap)},label:r.__("Word Wrap")});e.addCommand(I.currentLineWrap,{label:r.__("Wrap Words"),caption:r.__("Wrap words for the current file."),execute:()=>{const e=d.currentWidget;if(!e){return}const t=e.content.editor.getOption("lineWrap");e.content.editor.setOption("lineWrap",!t)},isEnabled:l,isToggled:()=>{var e;const t=d.currentWidget;return(e=t===null||t===void 0?void 0:t.content.editor.getOption("lineWrap"))!==null&&e!==void 0?e:false}});e.addCommand(I.changeTabs,{label:e=>{var t;if(e.size){return r._p("v4","Spaces: %1",(t=e.size)!==null&&t!==void 0?t:"")}else{return r.__("Indent with Tab")}},execute:async e=>{var i;t.indentUnit=e["size"]!==undefined?((i=e["size"])!==null&&i!==void 0?i:"4").toString():"Tab";try{return await n.set(a,"editorConfig",t)}catch(s){console.error(`Failed to set ${a}: ${s.message}`)}},isToggled:e=>{var n;const i=(n=


import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn import metrics

df = pd.read_csv('../data/songs.csv')

# perform clustering with 4 clusters
song_cluster = KMeans(n_clusters=4, init='random')
song_cluster.fit(df.drop('name', axis=1))
y_kmeans = song_cluster.predict(df.drop('name', axis=1))

# get info on one cluster
for cluster_in_question in range(0,4):
    # get center of cluster
    song_cluster.cluster_centers_[cluster_in_question]
    # grab songs in dataframe that belong to this cluster
    print df[np.where(y_kmeans == cluster_in_question, True, False)]['name']
    # look at top five qualities in cluster
    print sorted(zip(df.columns[1:], song_cluster.cluster_centers_[cluster_in_question]), key=lambda x:x[1], reverse=True)[1:6]

metrics.silhouette_score(df.drop('name',axis=1), song_cluster.labels_, metric='euclidean')

# perform k means with up to 15 clusters
k_rng = range(1,15)
est = [KMeans(n_clusters = k).fit(df.drop('name',axis=1)) for k in k_rng]

# calculate silhouette score
from sklearn import metrics
silhouette_score = [metrics.silhouette_score(df.drop('name',axis=1), e.labels_, metric='euclidean') for e in est[1:]]

# Plot the results
plt.figure(figsize=(7, 8))
plt.subplot(211)
plt.title('Using the elbow method to inform k choice')
plt.plot(k_rng[1:], silhouette_score, 'b*-')
plt.xlim([1,15])
plt.grid(True)
plt.ylabel('Silhouette Coefficient')
plt.plot(4,silhouette_score[2], 'o', markersize=12, markeredgewidth=1.5,
markerfacecolor='None', markeredgecolor='r')


    @Override
    public Bitmap getFilterResource(@NonNull BeautyInfo beautyInfo, int index) {
        return decodeFilterResource(getFilterItemInfo(beautyInfo, index));
    }

    @Override
    public BeautyInfo getDefaultBeauty() {
        return BeautyUtils.getDefaultBeautyInfo();
    }

    private void dispatchEffects(@NonNull TabInfo tabInfo, @IntRange(from = 0) int tabPosition, @NonNull ItemInfo itemInfo, @IntRange(from = 0) int itemPosition) {
        int tabType = tabInfo.getTabType();
        switch (tabType) {
            case BeautyConstants.TAB_TYPE_BEAUTY:
                dispatchBeautyEffects(itemInfo);
                break;
            case BeautyConstants.TAB_TYPE_FILTER:
                dispatchFilterEffects(itemInfo, itemPosition);
                break;
            case BeautyConstants.TAB_TYPE_MOTION:
            case BeautyConstants.TAB_TYPE_BEAUTY_FACE:
            case BeautyConstants.TAB_TYPE_GESTURE:
            case BeautyConstants.TAB_TYPE_CUTOUT_BACKGROUND:
                setMaterialEffects(tabInfo, itemInfo);
                break;
            case BeautyConstants.TAB_TYPE_GREEN:
                String file = "";
                if (itemInfo.getItemType() == BeautyConstants.ITEM_TYPE_GREEN_GOOD_LUCK) {
                    file = "green_1.mp4";
                }
                setGreenScreenFile(file);
                break;
            default:
                break;
        }
    }

    private void dispatchBeautyEffects(@NonNull ItemInfo itemInfo) {
        int itemType = itemInfo.getItemType();
        int level = itemInfo.getItemLevel();
        switch (itemType) {
            case BeautyConstants.ITEM_TYPE_BEAUTY_SMOOTH:           // 光滑
                setBeautyStyleAndLevel(0, level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_NATURAL:          // 自然
                setBeautyStyleAndLevel(1, level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_PITU:             // 天天p图
                setBeautyStyleAndLevel(2, level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_WHITE:            // 美白
                setWhitenessLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_RUDDY:            // 红润
                setRuddyLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_BIG_EYE:          // 大眼
                setEyeScaleLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_FACES_LIM:        // 瘦脸
                setFaceSlimLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_FACEV:            // V脸
                setFaceVLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_CHIN:             // 下巴
                setChinLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_FACE_SHORT:       // 短脸
                setFaceShortLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_NOSES_LIM:        // 瘦鼻
                setNoseSlimLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_EYE_BRIGHT:       // 亮眼
                setEyeLightenLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_TOOTH_WHITE:      // 白牙
                setToothWhitenLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEAUTY_WRINKLE_REMOVE:   // 祛皱
                setWrinkleRemoveLevel(level);
                break;
            case BeautyConstants.ITEM_TYPE_BEA


 PartialEq, Eq)]
#[repr(i32)]
pub enum LogicOp {
    /// Returns `0`.
    Clear = ash::vk::LogicOp::CLEAR.as_raw(),
    /// Returns `source & destination`.
    And = ash::vk::LogicOp::AND.as_raw(),
    /// Returns `source & !destination`.
    AndReverse = ash::vk::LogicOp::AND_REVERSE.as_raw(),
    /// Returns `source`.
    Copy = ash::vk::LogicOp::COPY.as_raw(),
    /// Returns `!source & destination`.
    AndInverted = ash::vk::LogicOp::AND_INVERTED.as_raw(),
    /// Returns `destination`.
    Noop = ash::vk::LogicOp::NO_OP.as_raw(),
    /// Returns `source ^ destination`.
    Xor = ash::vk::LogicOp::XOR.as_raw(),
    /// Returns `source | destination`.
    Or = ash::vk::LogicOp::OR.as_raw(),
    /// Returns `!(source | destination)`.
    Nor = ash::vk::LogicOp::NOR.as_raw(),
    /// Returns `!(source ^ destination)`.
    Equivalent = ash::vk::LogicOp::EQUIVALENT.as_raw(),
    /// Returns `!destination`.
    Invert = ash::vk::LogicOp::INVERT.as_raw(),
    /// Returns `source | !destination.
    OrReverse = ash::vk::LogicOp::OR_REVERSE.as_raw(),
    /// Returns `!source`.
    CopyInverted = ash::vk::LogicOp::COPY_INVERTED.as_raw(),
    /// Returns `!source | destination`.
    OrInverted = ash::vk::LogicOp::OR_INVERTED.as_raw(),
    /// Returns `!(source & destination)`.
    Nand = ash::vk::LogicOp::NAND.as_raw(),
    /// Returns `!0` (all bits set to 1).
    Set = ash::vk::LogicOp::SET.as_raw(),
}

impl From<LogicOp> for ash::vk::LogicOp {
    #[inline]
    fn from(val: LogicOp) -> Self {
        Self::from_raw(val as i32)
    }
}

impl Default for LogicOp {
    #[inline]
    fn default() -> LogicOp {
        LogicOp::Noop
    }
}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[repr(i32)]
pub enum BlendOp {
    Add = ash::vk::BlendOp::ADD.as_raw(),
    Subtract = ash::vk::BlendOp::SUBTRACT.as_raw(),
    ReverseSubtract = ash::vk::BlendOp::REVERSE_SUBTRACT.as_raw(),
    Min = ash::vk::BlendOp::MIN.as_raw(),
    Max = ash::vk::BlendOp::MAX.as_raw(),
}

impl From<BlendOp> for ash::vk::BlendOp {
    #[inline]
    fn from(val: BlendOp) -> Self {
        Self::from_raw(val as i32)
    }
}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[repr(i32)]
pub enum BlendFactor {
    Zero = ash::vk::BlendFactor::ZERO.as_raw(),
    One = ash::vk::BlendFactor::ONE.as_raw(),
    SrcColor = ash::vk::BlendFactor::SRC_COLOR.as_raw(),
    OneMinusSrcColor = ash::vk::BlendFactor::ONE_MINUS_SRC_COLOR.as_raw(),
    DstColor = ash::vk::BlendFactor::DST_COLOR.as_raw(),
    OneMinusDstColor = ash::vk::BlendFactor::ONE_MINUS_DST_COLOR.as_raw(),
    SrcAlpha = ash::vk::BlendFactor::SRC_ALPHA.as_raw(),
    OneMinusSrcAlpha = ash::vk::BlendFactor::ONE_MINUS_SRC_ALPHA.as_raw(),
    DstAlpha = ash::vk::BlendFactor::DST_ALPHA.as_raw(),
    OneMinusDs


from PIL import Image, ImageDraw
import math

# GIF画像のサイズとフレーム数
width, height = 400, 400
num_frames = 30

# 光ファイバーの位置を計算する関数
def calculate_fiber_position(radius, angle_offset):
    center_x, center_y = width // 2, height // 2
    angle_offset = math.radians(angle_offset)
    angle = math.radians(radius * 12) + angle_offset
    x = center_x + math.cos(angle) * radius
    y = center_y + math.sin(angle) * radius
    return x, y

# GIFを作成する
frames = []
for i in range(num_frames):
    # 白い背景の画像を作成
    frame = Image.new("RGB", (width, height), "white")
    draw = ImageDraw.Draw(frame)

    # 光ファイバーの位置を計算して描画
    for j in range(12):
        x1, y1 = calculate_fiber_position(j, i * 10)
        x2, y2 = calculate_fiber_position(j, i * 10 + 180)
        draw.line([(x1, y1), (x2, y2)], fill="blue", width=3)

    frames.append(frame)

# GIFを保存する
frames[0].save("fiber_optic.gif", save_all=True, append_images=frames[1:], loop=0, duration=50)


EAT_3)(p, o, o(124, s))
# define BOOST_PP_WHILE_124_I(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))
# define BOOST_PP_WHILE_125_I(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))
# define BOOST_PP_WHILE_126_I(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))
# define BOOST_PP_WHILE_127_I(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))
# define BOOST_PP_WHILE_128_I(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))
# define BOOST_PP_WHILE_129_I(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))
# define BOOST_PP_WHILE_130_I(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))
# define BOOST_PP_WHILE_131_I(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))
# define BOOST_PP_WHILE_132_I(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))
# define BOOST_PP_WHILE_133_I(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))
# define BOOST_PP_WHILE_134_I(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))
# define BOOST_PP_WHILE_135_I(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))
# define BOOST_PP_WHILE_136_I(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))
# define BOOST_PP_WHILE_137_I(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))
# define BOOST_PP_WHILE_138_I(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))
# define BOOST_PP_WHILE