DescOnce sync.Once
	file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescData = file_google_cloud_securitycenter_v2_iam_binding_proto_rawDesc
)

func file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescGZIP() []byte {
	file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescOnce.Do(func() {
		file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescData)
	})
	return file_google_cloud_securitycenter_v2_iam_binding_proto_rawDescData
}

var file_google_cloud_securitycenter_v2_iam_binding_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_google_cloud_securitycenter_v2_iam_binding_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_google_cloud_securitycenter_v2_iam_binding_proto_goTypes = []any{
	(IamBinding_Action)(0), // 0: google.cloud.securitycenter.v2.IamBinding.Action
	(*IamBinding)(nil),     // 1: google.cloud.securitycenter.v2.IamBinding
}
var file_google_cloud_securitycenter_v2_iam_binding_proto_depIdxs = []int32{
	0, // 0: google.cloud.securitycenter.v2.IamBinding.action:type_name -> google.cloud.securitycenter.v2.IamBinding.Action
	1, // [1:1] is the sub-list for method output_type
	1, // [1:1] is the sub-list for method input_type
	1, // [1:1] is the sub-list for extension type_name
	1, // [1:1] is the sub-list for extension extendee
	0, // [0:1] is the sub-list for field type_name
}

func init() { file_google_cloud_securitycenter_v2_iam_binding_proto_init() }
func file_google_cloud_securitycenter_v2_iam_binding_proto_init() {
	if File_google_cloud_securitycenter_v2_iam_binding_proto != nil {
		return
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_cloud_securitycenter_v2_iam_binding_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   1,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_google_cloud_securitycenter_v2_iam_binding_proto_goTypes,
		DependencyIndexes: file_google_cloud_securitycenter_v2_iam_binding_proto_depIdxs,
		EnumInfos:         file_google_cloud_securitycenter_v2_iam_binding_proto_enumTypes,
		MessageInfos:      file_google_cloud_securitycenter_v2_iam_binding_proto_msgTypes,
	}.Build()
	File_google_cloud_securitycenter_v2_iam_binding_proto = out.File
	file_google_cloud_securitycenter_v2_iam_binding_proto_rawDesc = nil
	file_google_cloud_securitycenter_v2_iam_binding_proto_goTypes = nil
	file_google_cloud_securitycenter_v2_iam_binding_proto_depIdxs = nil
}
// Copyright 2025 Google LLC
//
// 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
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific l


"宠物 - 豹",
  [210] = "宠物 - 熊",
  [211] = "宠物 - 野猪",
  [212] = "宠物 - 鳄鱼",
  [213] = "宠物 - 食腐鸟",
  [214] = "宠物 - 螃蟹",
  [215] = "宠物 - 猩猩",
  [217] = "宠物 - 迅猛龙",
  [218] = "宠物 - 陆行鸟",
  [220] = "亡灵种族特长",
  [226] = "弩",
  [228] = "魔杖",
  [229] = "长柄武器",
  [236] = "宠物 - 蝎子",
  [237] = "奥术",
  [251] = "宠物 - 海龟",
  [253] = "刺杀",
  [256] = "狂怒",
  [257] = "防护",
  [261] = "训练野兽",
  [267] = "防护",
  [270] = "宠物 - 天赋",
  [293] = "板甲",
  [313] = "语言：侏儒语",
  [315] = "语言：巨魔语",
  [333] = "附魔",
  [354] = "恶魔学识",
  [355] = "痛苦",
  [356] = "钓鱼",
  [373] = "增强",
  [374] = "恢复",
  [375] = "元素战斗",
  [393] = "剥皮",
  [413] = "锁甲",
  [414] = "皮甲",
  [415] = "布甲",
  [433] = "盾牌",
  [473] = "拳套",
  [533] = "骑术：迅猛龙",
  [553] = "骑术：机械陆行鸟",
  [554] = "骑术：骸骨战马",
  [573] = "恢复",
  [574] = "平衡",
  [593] = "毁灭",
  [594] = "神圣",
  [613] = "戒律",
  [633] = "开锁",
  [653] = "宠物 - 蝙蝠",
  [654] = "宠物 - 土狼",
  [655] = "宠物 - 猫头鹰",
  [656] = "宠物 - 风蛇",
  [673] = "语言：亡灵语",
  [713] = "骑术：科多兽",
  [733] = "种族特长 - 巨魔",
  [753] = "种族特长 - 侏儒",
  [754] = "种族特长 - 人类",
  [755] = "珠宝加工",
  [756] = "血精灵种族特长",
  [758] = "Pet - Event - Remote Control",
  [759] = "语言：德莱尼语",
  [760] = "德莱尼种族特长",
  [761] = "宠物 - 恶魔卫士",
  [762] = "骑术",
  [763] = "宠物 - 龙鹰",
  [


workfunction/update-aznetworkfunctiontrafficcollectortag
schema: 2.0.0
content_git_url: https://github.com/Azure/azure-powershell/blob/main/src/NetworkFunction/NetworkFunction/help/Update-AzNetworkFunctionTrafficCollectorTag.md
original_content_git_url: https://github.com/Azure/azure-powershell/blob/main/src/NetworkFunction/NetworkFunction/help/Update-AzNetworkFunctionTrafficCollectorTag.md
cmdletStatus: preview
cmdletStatusMessage: This cmdlet is part of a **Preview** module. Preview versions aren't recommended for use in production environments. For more information, see https://aka.ms/azps-refstatus.
---

# Update-AzNetworkFunctionTrafficCollectorTag

## SYNOPSIS
update the specified Azure Traffic Collector tags.

## SYNTAX

### UpdateExpanded (Default)
```
Update-AzNetworkFunctionTrafficCollectorTag -AzureTrafficCollectorName <String> -ResourceGroupName <String>
 [-SubscriptionId <String>] [-Tag <Hashtable>] [-DefaultProfile <PSObject>]
 [-WhatIf] [-Confirm] [<CommonParameters>]
```

### UpdateViaJsonString
```
Update-AzNetworkFunctionTrafficCollectorTag -AzureTrafficCollectorName <String> -ResourceGroupName <String>
 [-SubscriptionId <String>] -JsonString <String> [-DefaultProfile <PSObject>]
 [-WhatIf] [-Confirm] [<CommonParameters>]
```

### UpdateViaJsonFilePath
```
Update-AzNetworkFunctionTrafficCollectorTag -AzureTrafficCollectorName <String> -ResourceGroupName <String>
 [-SubscriptionId <String>] -JsonFilePath <String> [-DefaultProfile <PSObject>]
 [-WhatIf] [-Confirm] [<CommonParameters>]
```

### UpdateViaIdentityExpanded
```
Update-AzNetworkFunctionTrafficCollectorTag -InputObject <INetworkFunctionIdentity> [-Tag <Hashtable>]
 [-DefaultProfile <PSObject>] [-WhatIf] [-Confirm] [<CommonParameters>]
```

## DESCRIPTION
update the specified Azure Traffic Collector tags.

## EXAMPLES

### Example 1: Updates a traffic collector tag
```powershell
Update-AzNetworkFunctionTrafficCollectorTag -azuretrafficcollectorname atc -resourcegroupname rg1 | Format-List
```

```output
Name              : atc
Etag              : cf0336a2-7454-4aa4-add9-1de3e2291143
Id                : /subscriptions/subid/resourceGroups/rg1/providers/Microsoft.NetworkFunction/azureTrafficCollectors/atc
Type              : Microsoft.NetworkFunction/azureTrafficCollectors
Location          : West US
Tags              : {
                        "key1": "value1",
                        "key2": "value2"
                    }
Properties        : {
                        "collectorPolicies": [],
                        "provisioningState": "Succeeded"
                    }
```

This cmdlet updates a traffic collector tag.

## PARAMETERS

### -AzureTrafficCollectorName
Azure Traffic Collector name

```yaml
Type: System.String
Parameter Sets: UpdateExpanded, UpdateViaJsonString, UpdateViaJsonFilePath
Aliases:

Required: True
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```

### -DefaultProfile
The DefaultProfile parameter is not functional.
Use the SubscriptionId parameter when available if executing the cmdlet against a different subscription.

```yaml
Type: System.Management.Automation.PSObject
Parameter Sets: (All)
Aliases: AzureRMContext, AzureCredential

Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```

### -InputObject
Identity Parameter

```yaml
Type: Microsoft.Azure.PowerShell.Cmdlets.NetworkFunction.Models.INetworkFunctionIdentity
Parameter Sets: UpdateViaIdentityExpanded
Aliases:

Required: True
Position: Named
Default value: None
Accept pipeline input: True (ByValue)
Accept wildcard characters


的鳄鱼",nil},
[56184] = {"暴牙兔妖",nil},
[56185] = {"暴牙强盗",nil},
[56186] = {"被驱逐的猢狲",nil},
[56187] = {"利尔·夜风",nil},
[56188] = {"灼疮触须",nil},
[56189] = {"追猎者",nil},
[56190] = {"玛诺洛斯","毁灭者"},
[56191] = {"zzTest Spawn - Frog",nil},
[56192] = {"范妮小姐",nil},
[56193] = {"尚喜师父的灵魂",nil},
[56194] = {"蜘蛛幼虫",nil},
[56195] = {"逃脱的部落工程师",nil},
[56197] = {"Catch and Release Kill Credit",nil},
[56198] = {"林地追猎者",nil},
[56199] = {"轻翼猎手",nil},
[56200] = {"雾皮褐熊",nil},
[56201] = {"百木园黄蜂",nil},
[56203] = {"胀鼓鼓的土拨鼠",nil},
[56204] = {"庞·雷脚",nil},
[56205] = {"梁·雷脚",nil},
[56206] = {"风裘族长",nil},
[56207] = {"昂·雷脚",nil},
[56208] = {"放羊的弗二郎",nil},
[56209] = {"棘杖族长",nil},
[56210] = {"金酿族长",nil},
[56222] = {"勇敢的卡拉什",nil},
[56223] = {"Kill Credit: Old Friends",nil},
[56224] = {"Kill Credit: New Friends",nil},
[56225] = {"风裘旋风",nil},
[56226] = {"Gong of Hope",nil},
[56227] = {"米希卡","军情七处"},
[56228] = {"清心焰",nil},
[56229] = {"Watermelon Credit",nil},
[56230] = {"Turnip Credit",nil},
[56231] = {"法力虚空",nil},
[56232] = {"督军伊唵孟",nil},
[56233] = {"珠鳍村民",nil},
[56234] = {"Dam Worker",nil},
[56235] = {"艾玛琳·塔特尔",nil},
[56236] = {"受伤的船员",nil},
[56237] = {"尼希",nil},
[56238] = {"黯博妮亚",nil},
[56239] = {"壮年穆山兽",nil},
[56240] = {"猢狲驭兽者",nil},
[56241] = {"大箩耕农",nil},
[56242] = {"猢狲吟唱者",nil},
[56243] = {"土豆",nil},
[56248] = {"Hunting Summon Stalker",nil},
[56249] = {"暮光突袭者","暮光龙军团"},
[56250] = {"暮光突袭者","暮光龙军团"},
[56251] = {"暮光突袭者","暮光龙军团"},
[


fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}/* cyrillic-ext */
@font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUQjIg1_i6t8kCHKm459WxRxC7mw9c.woff2) format('woff2');
    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
  }
  /* cyrillic */
  @font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUQjIg1_i6t8kCHKm459WxRzS7mw9c.woff2) format('woff2');
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
  }
  /* vietnamese */
  @font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUQjIg1_i6t8kCHKm459WxRxi7mw9c.woff2) format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
  }
  /* latin-ext */
  @font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUQjIg1_i6t8kCHKm459WxRxy7mw9c.woff2) format('woff2');
    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  }
  /* latin */
  @font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 400;
    src: url(https://fonts.gstatic.com


eanParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.shape.Rectangle

@Description("Polar to rectangular")
class PolarToRectangular : Filter1to1(mppFilterShader(fx_polar_to_rectangular, "polar-to-rectangular")) {
    @BooleanParameter("log polar")
    var logPolar:Boolean by parameters

    init {
        logPolar = true
    }

    var bicubicFiltering = true
    override fun apply(source: Array<ColorBuffer>, target: Array<ColorBuffer>, clip: Rectangle?) {
        if (bicubicFiltering && source.isNotEmpty()) {
            source[0].generateMipmaps()
            source[0].filter(MinifyingFilter.LINEAR_MIPMAP_LINEAR, MagnifyingFilter.LINEAR)
        }
        super.apply(source, target, clip)
    }
}@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")

package org.openrndr.extra.fx.edges

import org.openrndr.color.ColorRGBa
import org.openrndr.draw.Filter1to1
import org.openrndr.extra.fx.fx_luma_laplacian
import org.openrndr.extra.fx.mppFilterShader
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter

@Description("Luma Sobel")
class LumaLaplacian : Filter1to1(mppFilterShader(fx_luma_laplacian, "luma-laplacian")) {
    @ColorParameter("background color")
    var backgroundColor: ColorRGBa by parameters

    @ColorParameter("edge color")
    var edgeColor: ColorRGBa by parameters

    @DoubleParameter("background opacity", 0.0, 1.0)
    var backgroundOpacity: Double by parameters

    @DoubleParameter("edge opacity", 0.0, 1.0)
    var edgeOpacity: Double by parameters

    init {
        backgroundColor = ColorRGBa.BLACK
        edgeColor = ColorRGBa.WHITE
        edgeOpacity = 1.0
        backgroundOpacity = 1.0
    }
}
@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")

package org.openrndr.extra.fx.color

import org.openrndr.color.ColorRGBa
import org.openrndr.draw.Filter1to1
import org.openrndr.extra.fx.fx_luma_map
import org.openrndr.extra.fx.mppFilterShader
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter

@Description("Luma map ")
class LumaMap : Filter1to1(mppFilterShader(fx_luma_map, "luma-map")) {
    @ColorParameter("foreground color")
    var foreground: ColorRGBa by parameters

    @ColorParameter("background color")
    var background: ColorRGBa by parameters

    @DoubleParameter("background opacity", 0.0, 1.0)
    var backgroundOpacity: Double by parameters

    @DoubleParameter("foreground opacity", 0.0, 1.0)
    var foregroundOpacity: Double by parameters

    init {
        foreground = ColorRGBa.WHITE
        background = ColorRGBa.BLACK
        foregroundOpacity = 1.0
        backgroundOpacity = 1.0
    }
}@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED")

package org.openrndr.extra.fx.blur

import org.openrndr.draw.Filter1to1
import org.openrndr.extra.fx.fx_gaussian_blur
import org.openrndr.extra.fx.mppFilterShader

import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter
import org.openrndr.extra.parameters.IntParameter

/**
 * Exact Gaussian blur, implemented as a single pass filter
 */
@


erald Circle",
			["inf2"] = "",
			["icon"] = 3,
		},
	},
	["Fyrenna"] = {
		[9] = {
			[1] = 4349,
			[2] = 6986,
			[3] = 4486,
			[4] = 6921,
			["inf1"] = "Food & Drink Vendor",
			["inf2"] = "Level 30",
			["icon"] = 3,
		},
	},
	["Sigrun Ironhew"] = {
		[5] = {
			[1] = 4116,
			[2] = 5381,
			[3] = 4351,
			[4] = 5326,
			["inf1"] = "",
			["inf2"] = "",
			["icon"] = 3,
		},
	},
	["Hammerfall Peon"] = {
		[2] = {
			[1] = 5486,
			[2] = 6067,
			[3] = 5930,
			[4] = 5980,
			["inf1"] = "Humanoid Warrior",
			["inf2"] = "Level 34",
			["icon"] = 1,
		},
	},
	["Master Sergeant Maclure"] = {
		[31] = {
			[1] = 5957,
			[2] = 5422,
			[3] = 5971,
			[4] = 5416,
			["inf1"] = "War Effort Recruiter",
			["inf2"] = "Level 60 (Elite)",
			["icon"] = 3,
		},
	},
	["Riding Kodo"] = {
		[46] = {
			[1] = 3721,
			[2] = 6058,
			[3] = 3865,
			[4] = 5983,
			["inf1"] = "Purple",
			["inf2"] = "",
			["icon"] = 3,
		},
	},
	["Ulbrek Firehand"] = {
		[21] = {
			[1] = 8957,
			[2] = 7052,
			[3] = 8957,
			[4] = 7052,
			["inf1"] = "Stable Master",
			["inf2"] = "",
			["icon"] = 3,
		},
	},
	["Molten Destroyer"] = {
		["Molten Core"] = {
			[1] = 0,
			[2] = 0,
			[3] = 0,
			[4] = 0,
			["inf1"] = "elite Giant Warrior",
			["inf2"] = "Level 63",
			["icon"] = 3,
		},
	},
	["Agam'ar"] = {
		[52] = {
			[1] = 0,
			[2] = 0,
			[3] = 0,
			[4] = 0,
			["inf1"] = "elite Beast Warrior",
			["inf2"] = "Level 25",
			["icon"] = 1,
		},
	},
	["Stitches"] = {
		[14] = {
			[1] = 6057,
			[2] = 6359,
			[3] = 6904,
			[4] = 4676,
			["inf1"] = "elite Undead Warrior",
			["inf2"] = "Level 35",
			["icon"] = 1,
		},
	},
	["Innkeeper Skindle"] = {
		[32] = {
			[1] = 7725,
			[2] = 2714,
			[3] = 7744,
			[4] = 2696,
			["inf1"] = "Innkeeper",
			["inf2"] = "Level 46",
			["icon"] = 3,
		},
	},
	["Giant Moss Creeper"] = {
		[20] = {
			[1] = 3817,
			[2] = 8016,
			[3] = 6541,
			[4] = 6609,
			["inf1"] = "Beast Warrior",


 (++i >= N) {
					this.mt[0] = this.mt[N - 1];
					i = 1;
				}
				if (++j >= l) {
					j = 0;
				}
			}

			for (var k = N - 1; k != 0; --k) {
				var s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
				this.mt[i] = (this.mt[i]
						^ (((1566083941 * ((s & 0xffff0000) >>> 16)) << 16)
							+ 1566083941 * (s & 0x0000ffff)))
					- i;
				if (++i >= N) {
					this.mt[0] = this.mt[N-1];
					i = 1;
				}
			}

			this.mt[0] = 0x80000000;
			return;
		default:
			var seeds = new Array();
			for (var i = 0; i < a.length; ++i) {
				seeds.push(a[i]);
			}
			this.setSeed(seeds);
			return;
		}
	}

    this.setSeed(0x1BADF00D);

    this.next = function (bits)
	{
		if (this.mti >= N) {
			var x = 0;

			for (var k = 0; k < N - M; ++k) {
				x = (this.mt[k] & 0x80000000) | (this.mt[k + 1] & 0x7fffffff);
				this.mt[k] = this.mt[k + M] ^ (x >>> 1) ^ MAG01[x & 0x1];
			}
			for (var k = N - M; k < N - 1; ++k) {
				x = (this.mt[k] & 0x80000000) | (this.mt[k + 1] & 0x7fffffff);
				this.mt[k] = this.mt[k + (M - N)] ^ (x >>> 1) ^ MAG01[x & 0x1];
			}
			x = (this.mt[N - 1] & 0x80000000) | (this.mt[0] & 0x7fffffff);
			this.mt[N - 1] = this.mt[M - 1] ^ (x >>> 1) ^ MAG01[x & 0x1];

			this.mti = 0;
		}

		var y = this.mt[this.mti++];
		y ^= y >>> 11;
		y ^= (y << 7) & 0x9d2c5680;
		y ^= (y << 15) & 0xefc60000;
		y ^= y >>> 18;
		return (y >>> (32 - bits)) & 0xFFFFFFFF;
	}
}

// Position variables
var g_board = new Array(256); // Sentinel 0x80, pieces are in low 4 bits, 0x8 for color, 0x7 bits for piece type
var g_toMove; // side to move, 0 or 8, 0 = black, 8 = white
var g_castleRights; // bitmask representing castling rights, 1 = wk, 2 = wq, 4 = bk, 8 = bq
var g_enPassentSquare;
var g_baseEval;
var g_hashKeyLow, g_hashKeyHigh;
var g_inCheck;

// Utility variables
var g_moveCount = 0;
var g_moveUndoStack = new Array();

var g_move50 = 0;
var g_repMoveStack = new Array();

var g_hashSize = 1 << 22;
var g_hashMask = g_hashSize - 1;
var g_hashTable;

var g_killers;
var historyTable = new Array(32);

var g_zobristLow;
var g_zobristHigh;
var g_zobristBlackLow;
var g_zobristBlackHigh;

// Evaulation variables
var g_mobUnit;

var hashflagAlpha = 1;
var hashflagBeta = 2;
var hashflagExact = 3;

function HashEntry(lock, value, flags, hashDepth, bestMove, globalPly) {
    this.lock = lock;
    this.value = value;
    this.flags = flags;
    this.hashDepth = hashDepth;
    this.bestMove = bestMove;
}

function MakeSquare(row, column) {
    return ((r


ymede",
    pos = { x = 0, y = 2},
    vars = {},
    dollars = 5,
    mult = 2,
    stay_flipped = function(self, area, card)
        if (area == G.hand) and G.GAME.blind.prepped then
            return true
        end
    end,
    press_play = function(self)
        if not G.GAME.blind.disabled then
            G.GAME.blind.prepped = true
        end
    end,
    set_blind = function(self, reset, silent)
        if not reset then
            G.GAME.blind.prepped = true
        end
    end,
    in_pool = function(self)
        return G.GAME.modifiers["astro_blinds"]
    end,
    discovered = true,
}

SMODS.Blind	{
    key = 'titan',
    config = {},
    boss = {min = 2, max = 10, astronaut = true},
    boss_colour = HEX("d3d28a"),
    atlas = "blinds",
    pos = { x = 0, y = 3},
    name = "The Titan",
    vars = {},
    dollars = 5,
    mult = 1.5,
    debuff_hand = function(self, cards, hand, handname, check)
        G.GAME.blind.triggered = true
        if G.GAME.current_round.hands_left > (check and 1 or 0) then
            return true
        end
    end,
    in_pool = function(self)
        return G.GAME.modifiers["astro_blinds"]
    end,
    discovered = true,
}

SMODS.Blind	{
    key = 'triton',
    config = {},
    boss = {min = 1, max = 10, astronaut = true},
    boss_colour = HEX("737373"),
    atlas = "blinds",
    name = "The Triton",
    pos = { x = 0, y = 4},
    vars = {},
    dollars = 5,
    mult = 2,
    in_pool = function(self)
        return G.GAME.modifiers["astro_blinds"]
    end,
    discovered = true,
}

SMODS.Blind	{
    key = 'coral_well',
    config = {},
    boss = {showdown = true, min = 2, max = 10, astronaut = true},
    showdown = true,
    boss_colour = HEX("ff7f50"),
    atlas = "blinds",
    pos = { x = 0, y = 0},
    name = 'Coral Well',
    vars = {},
    dollars = 5,
    mult = 3,
    in_pool = function(self)
        return G.GAME.modifiers["astro_blinds"]
    end,
    set_blind = function(self, reset, silent)
        if not reset then
            self.discards_sub = G.GAME.current_round.discards_left
            self.hands_sub = -G.GAME.current_round.discards_left
            ease_hands_played(-self.hands_sub)
            ease_discard(-self.discards_sub)
        end
    end,
    defeat = function(self)
        ease_hands_played(self.hands_sub)
        ease_discard(self.discards_sub)
    end,
    disable = function(self)
        if not G.GAME.blind.disabled then
            ease_hands_played(self.hands_sub)
            ease_discard(self.discards_sub)
        end
    end,
    discovered = true,
}

SMODS.Joker {
	name = "JollyJimball",
	key = "jolly_jimball",
	pos = { x = 0, y = 0 },
	config = { x_mult = 1, extra = 1.3, override_x_mult_check = true, type = "Pair"},
    pools = {["Meme"] = true},
    dependencies = {"Cryptid"},
	loc_vars = function(self, info_queue, center)
		return { vars = { center and center.ability.extra or 1.3, center and loca


ested .dijitTabListWrapper {height: auto;}.soria .dijitTabContainerBottom-tabs {margin-top: -1px; padding-left: 3px; border-top: 1px solid #B1BADF;}.soria .dijitTabContainerBottom .dijitTabListWrapper {border-top: none; padding-top: 1px; padding-bottom: 1px; float: left;}.soria .dijitTabContainerBottom-tabs .dijitTab {border-bottom: none; border-top: 1px solid #B1BADF; border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; padding-top: 3px; padding-bottom: 3px; background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;}.soria .dijitTabContainerBottom-tabs .dijitTabHover {background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;}.soria .dijitTabContainerBottom-tabs .dijitTabChecked {border-top-color:#94b4e6; background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;}.soria .dijitTabContainerBottom-container {border-bottom: none;}.soria .dijitTabContainerBottomStrip {padding-bottom: 2px; border: 1px solid #B1BADF;}.soria .dijitTabContainerBottomStrip {background: #F0F4FC;}.soria .dijitTabContainerBottom-spacer,.soria .dijitTabContainerTop-spacer {height: 2px; border: 1px solid #8ba0bd; background: #94b4e6;}.soria .dijitTabContainerTop-spacer {border-top: none;}.soria .dijitTabContainerBottom-spacer {border-bottom: none;}.soria .dijitTabContainerRight-tabs {height: 100%; border-color: #ccc; padding-top: 3px;}.soria .dijitTabContainerRight-tabs .dijitTab {border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-bottom: none; border-left: 1px solid #B1BADF; border-bottom: 1px solid #B1BADF !important; padding: 4px 6px 2px 8px;}.soria .dijitTabContainerRight-tabs .dijitTabChecked {border-left-color: #94b4e6; background: url("../images/tabRightChecked.gif") no-repeat left top !important;}.soria .dijitTabContainerRight-container {border-right: none;}.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTab,.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTab {border-bottom: solid #B1BADF 1px; margin-bottom: -1px;}.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked,.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked,.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover,.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover {border-bottom: solid #94b4e6 1px; margin-bottom: -1px;}.soria .dijitTabContainerRightStrip {padding-right: 2px; border: 1px solid #B1BADF; background: #F0F4FC; border-left: none;}.soria .dijitTabContainerLeft-tabs {border-color: #ccc; padding-top: 3px; height: 100%;}.soria .dijitTabContainerLeft-tabs .dijitTab {border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-right: 1px solid #B1BADF; border-bottom: 1px solid #B1BADF;}.soria .dijitTabContainerLeft-tabs .dijitTabChecked {border-right: 1px solid #94b4e6; background: url("../images/t


font-weight:700;
	overflow:hidden;
	white-space:nowrap;
	text-overflow:ellipsis
}
.ui-dialog-header>i {
	display:block;
	float:right;
	width:20px;
	height:20px;
	line-height:20px;
	margin:17px 13px 0 0;
	font-style:normal;
	text-align:center;
	cursor:pointer;
	opacity:.35;
	transition:.2s
}
.ui-dialog-header>i:hover {
	opacity:1
}
.ui-dialog-header-drag {
	cursor:move
}
.ui-dialog-main {
	position:relative;
	padding:15px 0;
	min-height:100px;
	font-size:14px;
	line-height:160%;
	overflow:auto;
	word-break:break-all;
	color:#292929;
	-webkit-overflow-scrolling:touch;
	overscroll-behavior:contain
}
.ui-dialog-main>div {
	overflow:hidden;
	margin:0 15px
}
.ui-dialog-main>iframe,
.ui-dialog-main>img {
	display:block;
	position:absolute;
	top:0;
	left:0;
	width:100%;
	height:100%
}
.ui-dialog-main.ui-dialog-mobile-main {
	padding:10px 0
}
.ui-dialog-main.ui-dialog-mobile-main>div {
	margin:0 10px
}
.ui-dialog-main:hover .ui-dialog-image-prev,
.ui-dialog-main:hover .ui-dialog-image-next {
	opacity:1
}
.ui-dialog-waiting-wrapper {
	box-shadow:none;
	padding:0;
	background:rgba(0,0,0,.7);
	border-radius:4px
}
.ui-dialog-waiting-wrapper .ui-dialog-main {
	background:rgba(0,0,0,0)!important;
	min-height:0;
	color:#eee;
	font-size:13px;
	text-align:center;
	padding:10px
}
.ui-dialog-waiting-wrapper span {
	display:block;
	text-align:center;
	margin-top:8px
}
.ui-dialog-waiting-box {
	margin:0 auto!important;
	width:40px;
	height:40px;
	border-radius:50%;
	border:rgba(255,255,255,.4) solid 3px;
	border-left:#eee solid 3px;
	animation:UIDialogWaiting 1s linear infinite
}
.ui-dialog-prompt>p:first-child {
	font-size:14px;
	color:#f00;
	word-break:break-all
}
.ui-dialog-prompt>p:first-child+input {
	border-color:#f00!important
}
.ui-dialog-prompt input,
.ui-dialog-prompt textarea {
	display:block;
	box-shadow:none;
	padding:0 10px;
	width:calc(100% - 22px);
}
.ui-dialog-prompt input {
	margin:10px 0
}
.ui-dialog-image-prev,
.ui-dialog-image-next {
	opacity:0;
	transition:.2s
}
div.ui-dialog-image-wrapper {
	position:absolute;
	top:0;
	left:0;
	width:100%;
	height:100%;
	margin:0
}
.ui-dialog-image-wrapper>div:first-child {
	position:absolute;
	top:0;
	left:0;
	height:100%;
	transition-property:transform;
	transition-duration:.8s;
	transition-timing-function:cubic-bezier(.57,0,.375,1)
}
.ui-dialog-image-wrapper img {
	display:block;
	float:left
}
div


icon]::before { content: attr(data-icon); }

  [data-icon]::before,
  .o-app-layout-1::before,
.o-archive-1::before,
.o-archive-folder-1::before,
.o-bookmark-archive-1::before,
.o-cd-1::before,
.o-clock-1::before,
.o-code-window-1::before,
.o-computer-display-1::before,
.o-contact-card-1::before,
.o-data-storage-1::before,
.o-database-1::before,
.o-diploma-1::before,
.o-document-1::before,
.o-earth-globe-1::before,
.o-exit-1::before,
.o-home-1::before,
.o-id-card-1::before,
.o-imac-screen-1::before,
.o-ipad-1::before,
.o-laptop-screen-1::before,
.o-letter-1::before,
.o-like-hand-1::before,
.o-medical-chart-1::before,
.o-mouse-1::before,
.o-network-1::before,
.o-news-article-1::before,
.o-paper-stack-1::before,
.o-paperwork-1::before,
.o-presentation-1::before,
.o-profile-1::before,
.o-repository-1::before,
.o-sales-up-1::before,
.o-search-magnify-1::before,
.o-settings-window-1::before,
.o-stack-1::before,
.o-statistic-1::before,
.o-survey-1::before,
.o-table-content-1::before,
.o-timing-1::before,
.o-trophy-1::before,
.o-user-1::before,
.o-user-details-1::before,
.o-wifi-router-1::before,
.o-wireframe-1::before {
    display: inline-block;
  font-family: "orion-font";
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  line-height: 1;
  text-decoration: inherit;
  text-rendering: optimizeLegibility;
  text-transform: none;
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  font-smoothing: antialiased;
  }

  .o-app-layout-1::before { content: "\f300"; }
.o-archive-1::before { content: "\f301"; }
.o-archive-folder-1::before { content: "\f302"; }
.o-bookmark-archive-1::before { content: "\f303"; }
.o-cd-1::before { content: "\f304"; }
.o-clock-1::before { content: "\f305"; }
.o-code-window-1::before { content: "\f306"; }
.o-computer-display-1::before { content: "\f307"; }
.o-contact-card-1::before { content: "\f2c3"; }
.o-data-storage-1::before { content: "\f308"; }
.o-database-1::before { content: "\f309"; }
.o-diploma-1::before { content: "\f2c7"; }
.o-document-1::before { content: "\f30a"; }
.o-earth-globe-1::before { content: "\f30b"; }
.o-exit-1::before { content: "\f30c"; }
.o-home-1::before { content: "\f2ce"; }
.o-id-card-1::before { content: "\f2d2"; }
.o-imac-screen-1::before { content: "\f30d"; }
.o-ipad-1::before { content: "\f30e"; }
.o-laptop-screen-1::


U = "imu", TOPIC_EXPOSURE = "exposure";
//    private static String[] STANARD_TOPICS = {TOPIC_EVENTS, TOPIC_IMAGE_RAW/*, TOPIC_IMU, TOPIC_EXPOSURE*/}; // tobi 4.1.21 commented out the IMU and EXPOSURE (never seen) topics since they cause problems with nonmonotonic timestamps in the MVSEC recrordings. Cause unknown. TODO fix IMU reading.
    private static String[] STANDARD_TOPICS = {TOPIC_EVENTS, TOPIC_IMAGE_RAW, TOPIC_IMU, TOPIC_EXPOSURE}; // tobi 4.1.21 commented out the IMU and EXPOSURE (never seen) topics since they cause problems with nonmonotonic timestamps in the MVSEC recrordings. Cause unknown. TODO fix IMU reading.

    private static final String RPG_TOPIC_HEADER = "/dvs/", MVSEC_TOPIC_HEADER = "/davis/left/", EV_IMO_TOPIC_HEADER = "/samsung/camera/"; // TODO arbitrarily choose left camera for MVSEC for now

    @Override
    public boolean toggleMarker() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public boolean jumpToNextMarker() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public boolean jumpToPrevMarker() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    private enum RosbagFileType {
        RPG(RPG_TOPIC_HEADER), MVSEC(MVSEC_TOPIC_HEADER), EV_IMO(EV_IMO_TOPIC_HEADER), Unknown("???");
        private String header;

        private RosbagFileType(String header) {
            this.header = header;
        }

        @Override
        public String toString() {
            return String.format("RosbagFileType: %s with topic header \"%s\"", super.toString(), header);
        }

    }

    // two types of topics depending on format of rosbag
    // RPG is from https://github.com/uzh-rpg/rpg_dvs_ros/tree/master/dvs_msgs/msg
    // MVSEC is from https://daniilidis-group.github.io/mvsec/data_format/
    RosbagFileType rosbagFileType = RosbagFileType.Unknown;

    /**
     * Interval for logging warnings about nonmonotonic timestamps.
     */
    public static final int NONMONOTONIC_TIMESTAMP_WARNING_INTERVAL = 10000;
    private int nonmonotonicTimestampCounter = 0;

    private int lastExposureUs; // holds last exposure value (in us?) to use for creating SOE and EOE events for frames
    private int markIn = 0;
    private int markOut;
    private boolean repeatEnabled = true;
    private Timestamp lastEndOfExposureTimestamp = null;  // stores an end-of-frame-exposure timestamp to put on APS frame events

    /**
     * Makes a new instance for a file and chip. A progressMonitor can pop up a
     * dialog for the long indexing operation
     *
     * @param f the file
     * @param chip the AEChip
     * @param progressMonitor an optional ProgressMonitor, set to null if not
     * desired
     * @throws BagReaderException
     * @throws java.lang.InterruptedException if constructing the stream which
     * requires indexing the topics takes a long time and the operation is
     * canceled
     */
    public RosbagFileInputStream(File f, AEChip chip, ProgressMonitor progressMonitor) throws BagReaderException, InterruptedException {
        this.eventPacket = new ApsDvsEventPacket<>(ApsDvsEvent.class);
        setFile(f);
        this.chip = chip;
        log.setLevel(Level.FINE);

        log.info("reading rosbag file " + f + " for chip " + chip);
        bagFile = BagReader.readFile(file);
        StringBuilder sb = new StringBui


HJlbWVtYmVycw== IFByYWRlc2g= IGNoYWxr IExhdXJlbg== XFNlcnZpY2U= X0dFTg== PiIpCg== IERvbGxhcg== IGVtb2pp Q2Fyb3VzZWw= LXBsYXllcg== IGFkanVzdGluZw== IGp1Z2E= YWxsZW5nZXM= Z2VuZQ== KGJvZHlQYXJzZXI= bG9wZWRpYQ== IEJlaGluZA== IHNsZWV2ZXM= IGRyYWdnaW5n IENoZXZyb2xldA== IGJpeg== aXZpdGllcw== IEZyZXF1ZW5jeQ== LGNoYXI= LldISVRF X3ByZXZpZXc= KSc7Cg== X2F4 SU9OUw== LmNwdQ== LmlucHV0cw== VUJF X2ZlZWQ= IFN1cHBsZW1lbnQ= ISku ZXN1cw== IFVEUA== IG1pY3JvcGhvbmU= IGNvbmZpcm1z LmlzTm90RW1wdHk= IjoiIiwK X1NDUkVFTg== CWV4cGVjdGVk Ky0rLSstKy0= IEhhaXQ= ZmFzdGNhbGw= IGRlcGljdA== dmI= X3BpY3R1cmU= CWRlc2NyaXB0aW9u IFdpZmU= dWNp IHZpY2lvdXM= 5LuW dWViYQ== IHNldFVzZXI= 44Gh IGRpdmluZw== IG9wZXJh dXNlcmNvbnRlbnQ= YXJhaA== KX0s eXVu dmVsdA== IHVuY292ZXJlZA== IGhpcHM= IG9zY2lsbA== IGFzc2VydGluZw== IFhp LnJlc3RvcmU= a2Vh IHNwZWxsaW5n IGRlcml2ZQ== YWJ3ZQ== IERvdw== LnNldFR5cGU= X3Zz IGNvenk= LmNhdGVnb3JpZXM= T3Jn X21ncg== IGR1bmdlb24= Y29sbGVjdGlvblZpZXc= IEJsYW5r YWNpYXM= w6TDpA== X2NsZWFudXA= X0FDVElWSVRZ IHRyaWFuZ2xlcw== Lk1lbnVJdGVt IGlwaG9uZQ== IFdvbg== XV0KCg== IENvbXBhcmlzb24= LkRvYw== IGNhbm9uaWNhbA== IFN1ZGFu Jyl7 VXBJbnNpZGU= YnVpbHRpbg== RU5DWQ== eGJl IGNodWNr IGNvbnRyYWRpY3Q= IG51ZXN0cm8= IGFyY2hpdGVjdHVyYWw= IEZpYg== IGNvbXBhcmVz Kms= Q2Zn 54Sh bnRlbg== TWF0Y2hlcw== IERPV05MT0FE X0hBTkRMRVI= bWFuYWdlbWVudA== W1M= RU5H woDC ZmFuZw== IHNsaXBwZWQ= IExhbmth ZXNjYXBpbmc= IHRhY2tsZXM= IFBlZHJv LlByb3A= Licn LkdlbmVyYXRlZA== Lk5ld0d1aWQ= YXRyaWdlc2ltYWw= aWxsb24= IHN0YXRpc3RpYw== c3BlY2llcw== aG9


,n|0)&&(A[t>>2]=W2(n)|0),a=e+36|0,m=_[a>>1]|0,n=m&65535;A:do if(n&1){f=+c[e+64>>3],w=+c[e+72>>3],t=i+16|0,l=+c[t>>3],u=+c[i>>3],s=l-u-f;e:do if(s>0)switch(n&6){case 4:{l=u+f,c[t>>3]=l,f=u;break e}case 2:{l=s+l,c[t>>3]=l,f=u+s,c[i>>3]=f;break e}default:{o=s*.5,f=o+u,c[i>>3]=f,l=l-o,c[t>>3]=l;break e}}else f=u;while(!1);if(n=i+24|0,o=+c[n>>3],t=i+8|0,s=+c[t>>3],u=o-s-w,u>0)switch(m&24){case 16:{u=s+w,c[n>>3]=u;break A}case 8:{w=u+o,c[n>>3]=w,s=s+u,c[t>>3]=s,u=w;break A}default:{u=u*.5,s=u+s,c[t>>3]=s,u=o-u,c[n>>3]=u;break A}}else u=o}else f=+c[i>>3],s=+c[i+8>>3],l=+c[i+16>>3],u=+c[i+24>>3];while(!1);switch(k=e+48|0,A[k>>2]=A[i>>2],A[k+4>>2]=A[i+4>>2],A[k+8>>2]=A[i+8>>2],A[k+12>>2]=A[i+12>>2],A[k+16>>2]=A[i+16>>2],A[k+20>>2]=A[i+20>>2],A[k+24>>2]=A[i+24>>2],A[k+28>>2]=A[i+28>>2],B[e+35>>0]=r,p=+(q[e+33>>0]|0),Z=+(q[e+34>>0]|0),o=f+p+Z,c[y>>3]=o,w=s+p+Z,k=y+8|0,c[k>>3]=w,s=l-p-Z,i=y+16|0,c[i>>3]=s,u=u-p-Z,h=y+24|0,c[h>>3]=u,t=e+88|0,B[e+92>>0]|0){case 1:{m=A[t>>2]|0,A[g>>2]=A[y>>2],A[g+4>>2]=A[y+4>>2],A[g+8>>2]=A[y+8>>2],A[g+12>>2]=A[y+12>>2],A[g+16>>2]=A[y+16>>2],A[g+20>>2]=A[y+20>>2],A[g+24>>2]=A[y+24>>2],A[g+28>>2]=A[y+28>>2],E9(m,g,r);break}case 3:{n=A[t>>2]|0,f=+c[n+24>>3],l=s-o-+c[n+16>>3];A:do if(l>0)switch(m&6){case 4:{c[i>>3]=s-l;break A}case 2:{c[y>>3]=l+o;break A}default:break A}while(!


 Attribute.propFont;
            this.myCanvas.fillStyle = Attribute.propDFStyle;
            this.myCanvas.fillText(value + 'cm', r / 2 - 22, -30);
            this.myCanvas.restore();
        } else if (this.eventFlag && this.eventCount === 3) {
            // 画直线

            let x = 0, y = 0;
            if (this.isMobild) {
                // 移动端
                let event: TouchEvent = (e as TouchEvent);

                x = event.touches[0].clientX - this.myCanvasNode.getBoundingClientRect().left;
                y = event.touches[0].clientY - this.myCanvasNode.getBoundingClientRect().top;
            } else {
                // PC端
                let event: MouseEvent = (e as MouseEvent);

                x = event.clientX - this.myCanvasNode.getBoundingClientRect().left;
                y = event.clientY - this.myCanvasNode.getBoundingClientRect().top;
            }

            // 清除画布并重绘图形
            this.rePaint.clearCanvas();
            this.rePaint.rePaint();

            // 磁性吸附
            let dataXY = this.adsorption.adsorpToXY(x, y);
            x = dataXY.x;
            y = dataXY.y;

            // 画相交的点
            this.intersect.repaintPoint();

            // 画点
            this.myCanvas.beginPath();
            this.myCanvas.fillStyle = Attribute.propDFStyle;
            this.myCanvas.arc(this.x, this.y, Attribute.propPointR, 0, 2 * Math.PI, false);
            this.myCanvas.fill();

            let value = parseFloat((Math.sqrt(Math.pow((x - this.x), 2) + Math.pow((y - this.y), 2)) / Attribute.unitProp).toFixed(1));
            let r = Math.round(value * Attribute.unitProp);
            if (r <= 4) {
                value = 0.1;
                r = 4;
            }
            let angle = Math.atan2((y - this.y), (x - this.x));
            angle = (angle >= 0) ? angle : (2 * Math.PI + angle);

            // 画线段
            this.myCanvas.beginPath();
            this.myCanvas.lineWidth = Attribute.propWitdh;
            this.myCanvas.strokeStyle = Attribute.propNSStyle;
            this.myCanvas.moveTo(this.x, this.y);
            this.myCanvas.arc(this.x, this.y, r, angle, angle, false);
            this.myCanvas.stroke();

            // 画尺子
            this.myCanvas.beginPath();
            this.myCanvas.strokeStyle = Attribute.propDSStyle;
            this.myCanvas.lineWidth = 2;
            this.myCanvas.moveTo(this.x, this.y);
            let rulep = this.rotatexy(this.x, this.y, 0, 20, angle);
            this.myCanvas.lineTo(rulep.x, rulep.y);
            rulep = this.rotatexy(this.x, this.y, r, 20, angle);
            this.myCanvas.lineTo(rulep.x, rulep.y);
            rulep = this.rotatexy(this.x, this.y, r, 0, angle);
            this.myCanvas.lineTo(rulep.x, rulep.y);
            for (let i = 10; i < r; i += 10) {
                rulep = this.rotatexy(this.x, this.y, i, 0, angle);
                this.myCanvas.moveTo(rulep.x, rulep.y);
                rulep = this.rotatexy(this.x, this.y, i, 5, angle);
                this.myCanvas.lineTo(rulep.x, rulep.y);
                i += 10;
                if (i < r) {
                    rulep = this.rotatexy(this.x, this.y, i, 0, angl


s

Compatibility

1.2.5rc1 and later

Description

The UseGlobbing directive controls use of glob() functionality, which is
needed for supporting wildcard characters such as *.

See also

UseIPv6

Name
UseIPv6 -- Disable IPv6 support

Synopsis

UseIPv6  [  "on"|"off"]

Default

UseIPv6 on

Context

server config

Module

mod_core

Compatibility

1.3.1rc1 and later

Description

This directive enables or disables the IPv6 support within proftpd. It's also
possible to control this behaviour with command-line options.

-4, --ipv4     Support IPv4 functionality only

-6, --ipv6     Support IPv6 functionality

See also

Examples

proftpd -4

Start Proftpd only with IPv4 functionality enabled.

User

Name
User -- Set the user the daemon will run as

Synopsis

User  [  User userid]

<P


.locale == const Locale('en', 'US')
            ? const Icon(Icons.check)
            : null,
        onTap: () {
          changeLanguage(const Locale('en', 'US'));
        },
      ),
      ListTile(
        title: const Text('Spanish'),
        trailing: GlobalService.to.locale == const Locale('es', 'ES')
            ? const Icon(Icons.check)
            : null,
        onTap: () {
          changeLanguage(const Locale('es', 'ES'));
        },
      ),
    ].toListView(
      separator: const DividerX(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<LanguageController>(
      init: LanguageController(),
      id: 'language',
      builder: (_) {
        return Scaffold(
          appBar: AppBar(title: Text(TextKey.yuYan.tr), elevation: 1),
          body: SafeArea(
            child: _buildView(),
          ),
        );
      },
    );
  }
}
import 'dart:async';
import 'dart:io';

// WebSocket连接状态变化事件
class WsConnectionEvent {
  final bool isOpen;
  final bool isError;
  final bool isClosed;
  final String message;

  WsConnectionEvent({
    this.isOpen = false,
    this.isError = false,
    this.isClosed = false,
    this.message = '',
  });
}

// 使用Dart实现的WebSocket客户端
class DartWssClient {
  WebSocket? _webSocket;
  String? connectedUrl;
  bool isSecureConnection = false;

  // 为消息和连接状态变化创建流控制器
  final _messageController = StreamController<String>.broadcast();
  final _connectionController = StreamController<WsConnectionEvent>.broadcast();

  // 创建一个二进制数据的流控制器
  final _binaryMessageController = StreamController<List<int>>.broadcast();

  // 暴露流以供监听
  Stream<String> get onMessage => _messageController.stream;
  Stream<WsConnectionEvent> get onConnectionChange => _connectionController.stream;
  Stream<List<int>> get onBinaryMessage => _binaryMessageController.stream;

  // 连接到WebSocket服务器
  Future<bool> connectWithUrl(String url) async {
    try {
      // 关闭任何现有连接
      await disconnect();

      // 更新状态
      connectedUrl = url;
      isSecureConnection = url.startsWith('wss://');

      // 通知连接正在尝试
      _connectionController.add(WsConnectionEvent(
        message: '正在连接到 $url...',
      ));

      // 创建WebSocket连接
      _webSocket = await WebSocket.connect(url);

      // 设置监听器
      _webSocket!.listen(
        (data) {
          if (data is String) {
            _messageController.add(data);
          } else if (data is List<int>) {
            _binaryMessageController.add(data);
          }
        },
        onDone: () {
          // 连接关闭
          _connectionController.add(WsConnectionEvent(
            isClosed: true,
            message: '连接已关闭',
          ));
        },
        onError: (error) {
          // 连接错误
          _connectionController.add(WsConnectionEvent(
            isError: true,
            message: '连接错误: $er


 the remote in the third message payload.
/// The first (unencrypted) message payload is always empty.
///
/// This message sequence is suitable for authenticated 3-message Noise handshake
/// patterns where the static keys of the responder and initiator are either known
/// (i.e. appear in the pre-message pattern) or are sent with the second and third
/// message, respectively (e.g. `XX`).
///
/// ```raw
/// initiator --{}--> responder
/// initiator <-{id}- responder
/// initiator -{id}-> responder
/// ```
pub async fn initiator<T, C>(
    io: T,
    session: Result<snow::HandshakeState, NoiseError>,
    identity: KeypairIdentity,
    identity_x: IdentityExchange,
    priv_key: identity::Keypair,
) -> Result<(RemoteIdentity<C>, NoiseOutput<T>), NoiseError>
where
    T: SplittableReadWrite,
    C: Protocol<C> + AsRef<[u8]>,
{
    let mut state = State::new(io, session, identity, identity_x)?;
    send_empty(&mut state).await?;
    info!("send empty finished");
    recv_identity(&mut state).await?;
    info!("recv identity finished");
    send_identity(&mut state).await?;
    state.finish(priv_key)
}

/// Creates an authenticated Noise handshake for the responder of a
/// 1.5-roundtrip (3 message) handshake pattern.
///
/// Subject to the chosen [`IdentityExchange`], this message sequence
/// identifies the local node in the second message payload and expects
/// the remote to identify itself in the third message payload. The first
/// (unencrypted) message payload is always empty.
///
/// This message sequence is suitable for authenticated 3-message Noise handshake
/// patterns where the static keys of the responder and initiator are either known
/// (i.e. appear in the pre-message pattern) or are sent with the second and third
/// message, respectively (e.g. `XX`).
///
/// ```raw
/// initiator --{}--> responder
/// initiator <-{id}- responder
/// initiator -{id}-> responder
/// ```
pub async fn responder<T, C>(
    io: T,
    session: Result<snow::HandshakeState, NoiseError>,
    identity: KeypairIdentity,
    identity_x: IdentityExchange,
    keypair: identity::Keypair,
) -> Result<(RemoteIdentity<C>, NoiseOutput<T>), NoiseError>
where
    T: SplittableReadWrite,
    C: Protocol<C> + AsRef<[u8]>,
{
    let mut state = State::new(io, session, identity, identity_x)?;
    recv_empty(&mut state).await?;
    info!("recv_empty finished");
    send_identity(&mut state).await?;
    recv_identity(&mut state).await?;
    state.finish(keypair)
}

/// Handshake state.
struct State<T> {
    /// The underlying I/O resource.
    io: NoiseFramed<T>,
    /// The associated public identity of the local node's static DH keypair,
    /// which can be sent to the remote as part of an authenticated handshake.
    identity: KeypairIdentity,
    /// The received signature over the remote's static DH public key, if any.
    dh_remote_pubkey_sig: Option<Vec<u8>>,
    /// The known or received public identity key of the remote, if any.
    id_remote_pubkey: Option<identity::PublicKey>,
    /// Whether to send the public identity key of the local node to the remote.
    send_identity: bool,
}

impl<T: SplittableReadWrite> State<T> {
    /// Initializes the state for a new Noise handshake, using the given local
    /// identity keypair and local DH static public key. The handshake messages
    /// will be sent and received


format!(
                "key_uri must start with prefix {}, but got {}",
                self.key_uri_prefix, key_uri
            )
            .into());
        }

        let uri = if let Some(stripped) = key_uri.strip_prefix(AWS_PREFIX) {
            stripped
        } else {
            key_uri
        };
        Ok(Box::new(crate::AwsAead::new(uri, self.kms.clone())?))
    }
}

enum CredentialsErr {
    BadFile, // File unreadable
    CredCsv, // CSV data not matching AWS credentials layout
    BadCsv,  // CSV data unparseable
    TooFewColumns,
}

fn extract_creds_csv(filename: &std::path::Path) -> Result<AwsCredentials, CredentialsErr> {
    let mut rdr = csv::Reader::from_path(filename).map_err(|_| CredentialsErr::BadFile)?;
    let mut lines = vec![];
    for result in rdr.records() {
        match result {
            Ok(sr) => lines.push(sr),
            Err(_) => return Err(CredentialsErr::BadCsv),
        }
    }

    // It is possible that the file is an AWS .ini credential file, and it can be
    // parsed as 1-column CSV file as well. A real AWS credentials.csv is never 1 column.
    if !lines.is_empty() && lines[0].len() == 1 {
        return Err(CredentialsErr::TooFewColumns);
    }

    // credentials.csv can be obtained when a AWS IAM user is created through IAM console.
    // The first line of the csv file is the "User name,Password,Access key ID,Secret access
    // key,Console login link" header line, which is automatically skipped.
    // The 2nd line of (returned as [0]) contains 5 comma separated values.
    // Parse the file with a strict format assumption as follows:
    // 1. There must be at least 4 columns and 1 row.
    // 2. The access key id and the secret access key must be on (0-based) column 2 and 3.
    if lines.is_empty() {
        return Err(CredentialsErr::CredCsv);
    }
    if lines[0].len() < 4 {
        return Err(CredentialsErr::CredCsv);
    }
    Ok(rusoto_credential::AwsCredentials::new(
        lines[0][2].to_string(),
        lines[0][3].to_string(),
        None,
        None,
    ))
}

fn get_region(key_uri: &str) -> Result<Region, TinkError> {
    // key_uri must have the following format: 'aws-kms://arn:<partition>:kms:<region>:[:path]'.
    // See http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html.
    let re1 = Regex::new(r"aws-kms://arn:(aws[a-zA-Z0-9-_]*):kms:([a-z0-9-]+):")
        .map_err(|e| wrap_err("failed to compile regex", e))?;
    let r = re1
        .captures(key_uri)
        .ok_or_else(|| TinkError::new("extracting region from URI failed"))?;
    if r.len() != 3 {
        return Err("extracting region from URI failed".into());
    }
    Region::from_str(&r[2]).map_err(|e| wrap_err("unknown region", e))
}
use bevy::prelude::*;

#[derive(Debug)]
pub struct BoardMaterials {
    pub conductor_material: Color,
    pub electron_head_material: Color,
    pub electron_tail_material: Color,
    pub selector_material: Color,
    pub generator_material: Color,
}

impl BoardMaterials {
    #[inline]
    pub const fn new() -> Self {
        Self {
            conductor_material: Color::GOLD,
            electron_head_material: Color::CYAN,
            electron


# Copyright 2019 The TensorFlow Authors. All Rights Reserved.
#
# 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
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
"""Utils for creating PerfZero benchmarks."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os

from absl import flags
from absl.testing import flagsaver
import tensorflow as tf  # pylint: disable=g-bad-import-order

FLAGS = flags.FLAGS

class PerfZeroBenchmark(tf.test.Benchmark):
  """Common methods used in PerfZero Benchmarks.

     Handles the resetting of flags between tests, loading of default_flags,
     overriding of defaults.  PerfZero (OSS) runs each test in a separate
     process reducing some need to reset the flags.
  """
  local_flags = None

  def __init__(self, output_dir=None, default_flags=None, flag_methods=None):
    """Initialize class.

    Args:
      output_dir: Base directory to store all output for the test.
      default_flags:
      flag_methods:
    """
    if not output_dir:
      output_dir = '/tmp'
    self.output_dir = output_dir
    self.default_flags = default_flags or {}
    self.flag_methods = flag_methods or {}

  def _get_model_dir(self, folder_name):
    """Returns directory to store info, e.g. saved model and event log."""
    return os.path.join(self.output_dir, folder_name)

  def _setup(self):
    """Sets up and resets flags before each test."""
    tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.INFO)
    if PerfZeroBenchmark.local_flags is None:
      for flag_method in self.flag_methods:
        flag_method()
      # Loads flags to get defaults to then override. List cannot be empty.
      flags.FLAGS(['foo'])
      # Overrides flag values with defaults for the class of tests.
      for k, v in self.default_flags.items():
        setattr(FLAGS, k, v)
      saved_flag_values = flagsaver.save_flag_values()
      PerfZeroBenchmark.local_flags = saved_flag_values
    else:
      flagsaver.restore_flag_values(PerfZeroBenchmark.local_flags)


ORY_FILE,
            NULL, 0);

        if (!NT_SUCCESS(ntStatus))
            break;

        ntStatus = supQueryObjectInformation(hFile,
            ObjectNameInformation,
            (PVOID*)&Buffer,
            NULL);

        if (!NT_SUCCESS(ntStatus))
            break;

        size = UNICODE_STRING_MAX_CHARS * sizeof(WCHAR);
        lpWin32Name = (LPWSTR)supHeapAlloc(size);

        if (lpWin32Name == NULL) {
            ntStatus = STATUS_MEMORY_NOT_ALLOCATED;
            break;
        }

        bResult = supConvertFileName(((POBJECT_NAME_INFORMATION)Buffer)->Name.Buffer,
            lpWin32Name,
            size / sizeof(WCHAR));

        if (!bResult) {
            ntStatus = STATUS_UNSUCCESSFUL;
        }

    } while (FALSE);

    if (Buffer) supHeapFree(Buffer);
    if (hFile) NtClose(hFile);
    if (bResult == FALSE && lpWin32Name) {
        supHeapFree(lpWin32Name);
        lpWin32Name = NULL;
    }
    *Win32FileName = lpWin32Name;

    return ntStatus;
}

/*
* supxDetectObjectCallback
*
* Purpose:
*
* Comparer callback routine used in objects enumeration.
*
*/
NTSTATUS NTAPI supxDetectObjectCallback(
    _In_ POBJECT_DIRECTORY_INFORMATION Entry,
    _In_ PVOID CallbackParam
)
{
    POBJSCANPARAM Param = (POBJSCANPARAM)CallbackParam;

    if (Entry == NULL) {
        return STATUS_INVALID_PARAMETER_1;
    }

    if (CallbackParam == NULL) {
        return STATUS_INVALID_PARAMETER_2;
    }

    if (Param->Buffer == NULL || Param->BufferSize == 0) {
        return STATUS_MEMORY_NOT_ALLOCATED;
    }

    if (Entry->Name.Buffer) {
        if (_strcmpi_w(Entry->Name.Buffer, Param->Buffer) == 0) {
            return STATUS_SUCCESS;
        }
    }
    return STATUS_UNSUCCESSFUL;
}

/*
* supxEnumSystemObjects
*
* Purpose:
*
* Lookup object by name in given directory.
*
*/
NTSTATUS NTAPI supxEnumSystemObjects(
    _In_opt_ LPCWSTR pwszRootDirectory,
    _In_opt_ HANDLE hRootDirectory,
    _In_ PENUMOBJECTSCALLBACK CallbackProc,
    _In_opt_ PVOID CallbackParam
)
{
    ULONG ctx, rlen;
    HANDLE hDirectory = NULL;
    NTSTATUS status;
    NTSTATUS CallbackStatus;
    OBJECT_ATTRIBUTES attr;
    UNICODE_STRING sname;

    POBJECT_DIRECTORY_INFORMATION    objinf;

    if (CallbackProc == NULL) {
        return STATUS_INVALID_PARAMETER_4;
    }

    status = STATUS_UNSUCCESSFUL;

    // We can use root directory.
    if (pwszRootDirectory != NULL) {
        RtlSecureZeroMemory(&sname, sizeof(sname));
        RtlInitUnicodeString(&sname, pwszRootDirectory);
        InitializeObjectAttributes(&attr, &sname, OBJ_CASE_INSENSITIVE, NULL, NULL);
        status = NtOpenDirectoryObject(&hDirectory, DIRECTORY_QUERY, &attr);
        if (!NT_SUCCESS(status)) {
            return status;
        }
    }
    else {
        if (hRootDirectory == NULL) {
            return STATUS_INVALID_PARAMETER_2;
        }
        hDirectory = hRootDirectory;
    }

    // Enumerate objects in directory.
    ctx = 0;
    do {

        rlen = 0;
        status = NtQueryDirectoryObject(hDirectory, NULL, 0, TRUE, FALSE, &ctx, &rlen);
        if (status != STATUS_BU


 父区域的开始和结束时间，如果为 null 则为整个时间轴
   */
  fun createLayoutModifier(
    beginTime: MinuteTime,
    finalTime: MinuteTime,
    parent: Pair<MinuteTime, MinuteTime>? = null,
  ) : Modifier {
    return Modifier.layout { measurable, constraints ->
      val weight =
        if (parent == null) calculateBeginFinalWeight(beginTime, finalTime)
        else calculateRelativeWeight(beginTime, finalTime, parent.first, parent.second)
      val height = (constraints.maxHeight * (weight.y - weight.x)).roundToInt()
      val placeable = measurable.measure(
        Constraints.fixed(constraints.maxWidth, height)
      )
      layout(placeable.width, placeable.height) {
        placeable.placeRelative(0, (constraints.maxHeight * weight.x).roundToInt())
      }
    }
  }

  /**
   * 计算 [beginTime] [finalTime] 在整个时间轴上的占比
   * @return Offset(startWeight, endWeight)
   */
  fun calculateBeginFinalWeight(
    beginTime: MinuteTime,
    finalTime: MinuteTime,
  ) : Offset {
    var startWeight = 0F
    var endWeight = 0F
    var allWeight = 0F
    data.fastForEach {
      allWeight += it.nowWeight
      if (beginTime >= it.endTime) {
        startWeight += it.nowWeight
      } else if (beginTime >= it.startTime) {
        startWeight += it.startTime.minutesUntil(beginTime) / (it.startTime.minutesUntil(it.endTime)).toFloat() * it.nowWeight
      }
      if (finalTime >= it.endTime) {
        endWeight += it.nowWeight
      } else if (finalTime >= it.startTime) {
        endWeight += it.startTime.minutesUntil(finalTime) / (it.startTime.minutesUntil(it.endTime)).toFloat() * it.nowWeight
      }
    }
    return Offset(
      x = startWeight / allWeight,
      y = endWeight / allWeight,
    )
  }

  /**
   * 计算 [time] 在整个时间轴上的占比
   */
  fun calculateWeight(
    time: MinuteTime
  ): Float {
    var allWeight = 0F
    var nowWeight = 0F
    data.fastForEach {
      allWeight += it.nowWeight
      if (time >= it.endTime) {
        nowWeight += it.nowWeight
      } else if (time >= it.startTime) {
        nowWeight += it.startTime.minutesUntil(time) / (it.startTime.minutesUntil(it.endTime)).toFloat() * it.nowWeight
      }
    }
    return nowWeight / allWeight
  }

  /**
   * 计算 [beginTime1] [finalTime1] 在 [beginTime2] [finalTime2] 上的占比
   * @return Offset(startWeight, endWeight)
   */
  fun calculateRelativeWeight(
    beginTime1: MinuteTime,
    finalTime1: MinuteTime,
    beginTime2: MinuteTime,
    finalTime2: MinuteTime,
  ): Offset {
    var startWeight1 = 0F
    var endWeight1 = 0F
    var startWeight2 = 0F
    var endWeight2 = 0F
    data.fastForEach {
      if (beginTime1 >= it.endTime) {
        startWeight1 += it.nowWeight
      } else if (beginTime1 >= it.startTime) {
        startWeight1 += it.startTime.minutesUntil(beginTime1) / (it.startTime.minutesUntil(it.endTime)).toFloat() * it.nowWeight
      }
      if (finalTime1 >= it.endTime) {
        endWeight1 += it.nowWeight
      } else if (finalTime1 >= it.startTime) {
        endWeight1 +=


--[[
    Script to post spell and ability descriptions into chat.
]]--

function onInit()
    Interface.onWindowOpened = windowCheck;
end

function windowCheck(w)
    --Debug.chat('onInit', w.getClass(), w.getDatabaseNode( ))
    if w == nil then return; end

    local class = w.getClass();

    -- note = note, power = spell, ref_ability = freat + feature + trait
    if class == 'note' or class == 'power' or class == 'ref_ability' then
        w.registerMenuItem(Interface.getString("textshare"), "textshare", 5);
    end

    onMenuSelection = menuAction;
end

function menuAction(selection, subselection, subsubselection)
    --Debug.chat('menu selection', selection, 'class', getClass())
    if selection == 5 then
        local sMessage = createOutput();
        postChatMessage(sMessage);
    end
end

function createOutput()
    --Debug.chat('ouputContent: class', getClass(), 'node', getDatabaseNode());
    local class = getClass();
    local node = getDatabaseNode();
    local sMessage;

    -- note or character ability
    --[[ class:
        note = notes
        ref_ability = character feature
        reference_feat = feat
        encounter = story

    ]]--

    -- note entry, class feature, character feat, story entry
    if class == 'note' or class == 'ref_ability' or class == 'reference_feat' or class == 'encounter' then
        sMessage = node.getChild('name').getText() .. '\r\r' .. node.getChild('text').getText();
    end

    -- spell power
    if class == 'power' then
        sMessage = node.getChild('name').getText() .. '\rSpell\r\r'
            .. 'Level ' .. node.getChild('level').getText() .. ' ' .. node.getChild('school').getText() .. '\r'
            .. 'Range ' .. node.getChild('range').getText() .. '\r'
            .. 'Components ' .. node.getChild('components').getText() ..  '\r'
            .. 'Duration ' .. node.getChild('duration').getText() .. '\r\r'
            .. node.getChild('description').getText() .. '\r\r'
            .. 'Source ' .. node.getChild('source').getText();
    end

    -- NPC CT spell power
    if class == 'ct_power_detail' then
        sMessage = node.getChild('name').getText() .. '\r\r' .. node.getChild('desc').getText();
    end

    -- items in item list
    if class == 'reference_equipment' then
        sMessage = node.getChild('name').getText() .. '\r\r' .. node.getChild('description').getText();
    end

    -- reference manual page
    if class == 'referencemanualpage' then
        n = 1;
        local childNode = node .. '.blocks.id-' .. getIdDBString(n);
        Debug.chat('ch


[2]
  L8_2 = L7_2
  L7_2 = L7_2.f7360ED03
  L7_2, L8_2, L9_2 = L7_2(L8_2)
  L10_2 = L4_2 - L7_2
  L11_2 = L5_2 - L8_2
  L12_2 = L6_2 - L9_2
  L13_2 = L10_2 * L10_2
  L14_2 = L11_2 * L11_2
  L13_2 = L13_2 + L14_2
  L14_2 = L12_2 * L12_2
  L13_2 = L13_2 + L14_2
  L14_2 = CAD81740580D071A3
  L14_2 = L14_2.S7CCDB9D618EE4BA0
  L13_2 = not (L13_2 < L14_2)
  return L13_2
end

L56_1.F5C01F349BFBF5E5E = L57_1
L56_1 = C23AF56A1984FC341
L56_1 = L56_1.prototype

function L57_1(A0_2)
  local L1_2
  L1_2 = false
  return L1_2
end

L56_1.FFA4C4F61C0DF06F8 = L57_1
L56_1 = C23AF56A1984FC341
L56_1 = L56_1.prototype

function L57_1(A0_2, A1_2, A2_2, A3_2)
  local L4_2, L5_2, L6_2, L7_2, L8_2
  L4_2 = A1_2[1]
  L5_2 = A2_2[1]
  L4_2 = L4_2 - L5_2
  L5_2 = A1_2[2]
  L6_2 = A2_2[2]
  L5_2 = L5_2 - L6_2
  L6_2 = A1_2[3]
  L7_2 = A2_2[3]
  L6_2 = L6_2 - L7_2
  L7_2 = L4_2 * L4_2
  L8_2 = L5_2 * L5_2
  L7_2 = L7_2 + L8_2
  L8_2 = L6_2 * L6_2
  L7_2 = L7_2 + L8_2
  L7_2 = A3_2 > L7_2
  return L7_2
end

L56_1.F7442580494538422 = L57_1
L56_1 = C23AF56A1984FC341
L56_1 = L56_1.prototype

function L57_1(A0_2)
  local L1_2, L2_2
  L1_2 = A0_2[4]
  L2_2 = A0_2[5]
  L1_2 = L1_2 > L2_2
  return L1_2
end

L56_1.F84DAE0F7F243B657 = L57_1
L56_1 = C23AF56A1984FC341
L56_1 = L56_1.prototype

function L57_1(A0_2)
  local L1_2
  A0_2[4] = 0.0
end

L56_1.F366DF431299705BF = L57_1
L56_1 = C23AF56A1984FC341
L56_1 = L56_1.prototype

function L57_1(A0_2, A1_2)
  local L2_2
  L2_2 = A0_2[


4e00\u4e2a\u975e java.security.Principal \u5b9e\u4f8b\u7684\u5bf9\u8c61\u6dfb\u52a0\u81f3\u4e3b\u9898\u7684 Principal \u96c6\u4e2d"},
        {"attempting to add an object which is not an instance of class",
                "\u8bd5\u56fe\u6dfb\u52a0\u4e00\u4e2a\u975e {0} \u5b9e\u4f8b\u7684\u5bf9\u8c61"},

        // javax.security.auth.login.AppConfigurationEntry
        {"LoginModuleControlFlag: ", "LoginModuleControlFlag: "},

        // javax.security.auth.login.LoginContext
        {"Invalid null input: name", "\u65e0\u6548\u7a7a\u8f93\u5165\uff1a\u540d\u79f0"},
        {"No LoginModules configured for name",
         "\u6ca1\u6709\u4e3a {0} \u914d\u7f6eLoginModules"},
        {"invalid null Subject provided", "\u63d0\u4f9b\u4e86\u65e0\u6548\u7a7a\u4e3b\u9898"},
        {"invalid null CallbackHandler provided",
                "\u63d0\u4f9b\u4e86\u65e0\u6548\u7684\u7a7a CallbackHandler"},
        {"null subject - logout called before login",
                "\u65e0\u6548\u4e3b\u9898 - \u5728\u767b\u5f55\u4e4b\u524d\u5373\u88ab\u8c03\u7528\u6ce8\u9500"},
        {"unable to instantiate LoginModule, module, because it does not provide a no-argument constructor",
                "\u65e0\u6cd5\u4f8b\u793a LoginModule\uff0c {0}\uff0c\u56e0\u4e3a\u5b83\u5e76\u672a\u63d0\u4f9b\u4e00\u4e2a\u4e0d\u542b\u53c2\u6570\u7684\u6784\u9020\u7a0b\u5e8f"},
        {"unable to instantiate LoginModule",
                "\u65e0\u6cd5\u4f8b\u793a LoginModule"},
        {"unable to instantiate LoginModule: ",
                "\u65e0\u6cd5\u5b9e\u4f8b\u5316 LoginModule: "},
        {"unable to find LoginModule class: ",
                "\u65e0\u6cd5\u627e\u5230 LoginModule \u7c7b\u522b\uff1a "},
        {"unable to access LoginModule: ",
                "\u65e0\u6cd5\u8bbf\u95ee LoginModule: "},
        {"Login Failure: all modules ignored",
                "\u767b\u5f55\u5931\u8d25\uff1a\u5ffd\u7565\u6240\u6709\u6a21\u5757"},

        // sun.security.provider.PolicyFile

        {"java.security.policy: error parsing policy:\n\tmessage",
                "java.security.policy: \u89e3\u6790\u9519\u8bef {0}\uff1a\n\t{1}"},
        {"java.security.policy: error adding Permission, perm:\n\tmessage",
                "java.security.policy: \u6dfb\u52a0\u6743\u9650\u9519\u8bef {0}\uff1a\n\t{1}"},
        {"java.security.policy: error adding Entry:\n\tmessage",
                "jav


", "http://example.com", false},
		{"http://example.com/foo", "http://example.com/foo/", true},
		{"http://example.com/foo//", "http://example.com/foo/", true},
		{"http://example.com/./foo/", "http://example.com/foo/", true},
		{"http://example.com/bar/../foo/", "http://example.com/foo/", true},
		{"/foo", "/foo", true},
		{"/foo", "/foo/", true},
		{"/foo/.", "/foo/", true},
		{"%/1234", "%/1234", true},
		{"%/1234", "%/123", false},
		{"/1234", "%/1234", false},
	} {
		if tt.match != Equal(tt.a, tt.b) {
			t.Errorf("Expected %q==%q to be %t", tt.a, tt.b, tt.match)
		}
	}
}

func TestExtractHostname(t *testing.T) {
	tests := map[string]string{
		"http://example.com":      "example.com",
		"https://example.com/foo": "example.com",

		"https://example.com:31337/not/with/a/bang/but/a/whimper": "example.com",
	}
	for start, expect := range tests {
		if got, _ := ExtractHostname(start); got != expect {
			t.Errorf("Got %q, expected %q", got, expect)
		}
	}
}
/*
Copyright The Helm Authors.
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

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package plugin

import (
	"os"
	"path/filepath"
	"strings"
	"testing"

	"helm.sh/helm/v4/pkg/provenance"
)

func TestSignPlugin(t *testing.T) {
	// Create a test plugin directory
	tempDir := t.TempDir()
	pluginDir := filepath.Join(tempDir, "test-plugin")
	if err := os.MkdirAll(pluginDir, 0755); err != nil {
		t.Fatal(err)
	}

	// Create a plugin.yaml file
	pluginYAML := `apiVersion: v1
name: test-plugin
type: cli/v1
runtime: subprocess
version: 1.0.0
runtimeConfig:
  platformCommand:
    - command: echo`
	if err := os.WriteFile(filepath.Join(pluginDir, "plugin.yaml"), []byte(pluginYAML), 0644); err != nil {
		t.Fatal(err)
	}

	// Create a tarball
	tarballPath := filepath.Join(tempDir, "test-plugin.tgz")
	tarFile, err := os.Create(tarballPath)
	if err != nil {
		t.Fatal(err)
	}
	if err := CreatePluginTarball(pluginDir, "test-plugin", tarFile); err != nil {
		tarFile.Close()
		t.Fatal(err)
	}
	tarFile.Close()

	// Create a test key for signing
	keyring := "../../pkg/cmd/testdata/helm-test-key.secret"
	signer, err := provenance.NewFromKeyring(keyring, "helm-test")
	if err != nil {
		t.Fatal(err)
	}
	if err := signer.DecryptKey(func(_ string) ([]byte, error) {
		return []byte(""), nil
	}); err != nil {
		t.Fatal(err)
	}

	// Read the tarball data
	tarballData, err := os.ReadFile(tarballPath)
	if err != nil {
		t.Fatalf("failed to read tarball: %v", err)
	}

	// Sign the plugin tarball
	sig, err := SignPlugin(tarballData, filepath.Base(tarballPath), signer)
	if err != nil


 += 1;
    }
    isLoadingMore = false;
    return res;
  }

  // 下拉刷新
  Future onRefresh() async {
    queryHotFeed('onRefresh');
  }

  // 上拉加载
  Future onLoad() async {
    queryHotFeed('onLoad');
  }

  // 返回顶部并刷新
  void animateToTop() async {
    if (scrollController.offset >=
        MediaQuery.of(Get.context!).size.height * 5) {
      scrollController.jumpTo(0);
    } else {
      await scrollController.animateTo(0,
          duration: const Duration(milliseconds: 500), curve: Curves.easeInOut);
    }
  }
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pilipala/http/member.dart';
import 'package:pilipala/models/member/archive.dart';

class MemberSearchController extends GetxController {
  final ScrollController scrollController = ScrollController();
  Rx<TextEditingController> controller = TextEditingController().obs;
  final FocusNode searchFocusNode = FocusNode();
  RxString searchKeyWord = ''.obs;
  String hintText = '搜索';
  RxString loadingStatus = 'init'.obs;
  RxString loadingText = '加载中...'.obs;
  bool hasRequest = false;
  late int mid;
  RxString uname = ''.obs;
  int archivePn = 1;
  int archiveCount = 0;
  RxList<VListItemModel> archiveList = <VListItemModel>[].obs;
  int dynamic_pn = 1;
  RxList<VListItemModel> dynamicList = <VListItemModel>[].obs;

  int ps = 30;

  @override
  void onInit() {
    super.onInit();
    mid = int.parse(Get.parameters['mid']!);
    uname.value = Get.parameters['uname']!;
  }

  // 清空搜索
  void onClear() {
    if (searchKeyWord.value.isNotEmpty && controller.value.text != '') {
      controller.value.clear();
      searchKeyWord.value = '';
    } else {
      Get.back();
    }
  }

  void onChange(value) {
    searchKeyWord.value = value;
  }

  //  提交搜索内容
  void submit() {
    loadingStatus.value = 'loading';
    if (hasRequest) {
      archivePn = 1;
      searchArchives();
    }
  }

  // 搜索视频
  Future searchArchives({type = 'init'}) async {
    if (type == 'onLoad' && loadingText.value == '没有更多了') {
      return;
    }
    var res = await MemberHttp.memberArchive(
      mid: mid,
      pn: archivePn,
      keyword: controller.value.text,
      order: 'pubdate',
    );
    if (res['status']) {
      if (type == 'init' || archivePn == 1) {
        archiveList.value = res['data'].list.vlist;
      } else {
        archiveList.addAll(res['data'].list.vlist);
      }
      archiveCount = res['data'].page['count'];
      if (archiveList.length == archiveCount) {
        loadingText.value = '没有更多了';
      }
      archivePn += 1;
      hasRequest = true;
    }
    // loadingStatus.value = 'finish';
    return res;
  }

  // 搜索动态
  Future searchDynamic() async {}

  //
  onLoad() {
    searchArchives(type: 'onLoad');
  }
}
import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart';
import 'package:pilipala/models/video/reply/emote.dart';
import 'package:pilipala/pages/emote/index.dart';
import 'package:pilipala/pages/video/


emComparisonInfo", Nilable = false },
			},
		},
	},

	Events =
	{
	},

	Tables =
	{
		{
			Name = "TooltipComparisonMethod",
			Type = "Enumeration",
			NumValues = 4,
			MinValue = 0,
			MaxValue = 3,
			Fields =
			{
				{ Name = "Single", Type = "TooltipComparisonMethod", EnumValue = 0 },
				{ Name = "WithBothHands", Type = "TooltipComparisonMethod", EnumValue = 1 },
				{ Name = "WithBagMainHandItem", Type = "TooltipComparisonMethod", EnumValue = 2 },
				{ Name = "WithBagOffHandItem", Type = "TooltipComparisonMethod", EnumValue = 3 },
			},
		},
		{
			Name = "TooltipItemComparisonInfo",
			Type = "Structure",
			Fields =
			{
				{ Name = "method", Type = "TooltipComparisonMethod", Nilable = false, Default = "Single" },
				{ Name = "item", Type = "TooltipComparisonItem", Nilable = false },
				{ Name = "additionalItems", Type = "table", InnerType = "TooltipComparisonItem", Nilable = false },
			},
		},
	},
};

APIDocumentation:AddDocumentationTable(TooltipComparison);


3-.938H7.395Z" /></g></symbol><symbol fill="none"  viewBox="0 0 16 16" id="icon-light_setting_off"><g fill="#1E1F1F"><path d="M8.5 1.979a.5.5 0 1 0-1 0v6.166a.5.5 0 0 0 1 0V1.979Z" /><path d="M4.46 3.431a.5.5 0 0 0-.626-.78 6.666 6.666 0 1 0 8.33 0 .5.5 0 0 0-.624.78 5.666 5.666 0 1 1-7.08 0Z" /></g></symbol><symbol fill="none"  viewBox="0 0 20 20" id="icon-light_setting_phone"><g fill="#1E1F1F"><path d="M8.604 15.397c0-.345.28-.625.625-.625h1.542a.625.625 0 1 1 0 1.25H9.229a.625.625 0 0 1-.625-.625Z" /><path fill-rule="evenodd" clip-rule="evenodd" d="M12.398 1.666H7.104a3.125 3.125 0 0 0-3.125 3.125v10.417c0 1.726 1.399 3.125 3.125 3.125h5.791c1.726 0 3.125-1.399 3.125-3.125V4.791c0-1.725-1.399-3.125-3.125-3.125h-.497Zm-5.233 1.25h-.061c-1.036 0-1.875.84-1.875 1.875v10.417c0 1.036.839 1.875 1.875 1.875h5.791c1.036 0 1.875-.84 1.875-1.875V4.791c0-1.035-.84-1.875-1.875-1.875h-.06l-.44 1.316a1.458 1.458 0 0 1-1.383.997H8.987a1.458 1.458 0 0 1-1.384-.997l-.438-1.316Zm1.317 0h3.035l-.307.92a.208.208 0 0 1-.198.143H8.987a.208.208 0 0 1-.198-.142l-.307-.92Z" /></g></symbol><symbol fill="none"  viewBox="0 0 20 20" id="icon-light_setting_pwd"><g fill="#1E1F1F"><path d="M10.51 11.836a.625.625 0 0 0-1.25 0v1.85a.625.625 0 1 0 1.25 0v-1.85Z" /><path fill-rule="evenodd" clip-rule="evenodd" d="M5.46 6.065a4.417 4.417 0 0 1 4.434-4.398 4.418 4.418 0 0 1 4.416 4.417v1.313a3.786 3.786 0 0 1 2.543 3.577v3.574a3.785 3.785 0 0 1-3.785 3.785H6.702a3.785 3.785 0 0 1-3.785-3.785v-3.574A3.786 3.786 0 0 1 5.46 7.397V6.065Zm7.6.019v1.105H6.71v-1.12a3.167 3.167 0 0 1 3.18-3.152h.003a3.168 3.168 0 0 1 3.167 3.167ZM6.701 8.439a2.535 2.535 0 0 0-2.535 2.535v3.574c0 1.4 1.135 2.535 2.535 2.535h6.368c1.4 0 2.534-1.134 2.534-2.535v-3.574c0-1.4-1.135-2.535-2.534-2.535H6.7Z" /></g></symbol><symbol fill="none"  viewBox="0 0 16 16" id="icon-light_


回示例：
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe"
  }
}
```

## 8.更新文档
```bash
#bash命令：
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
  "doc": { "name": "Jane Doe", "age": 20 }
}
'

#kibana命令：
POST /customer/external/1/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}

返回示例：
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 2,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  }
}

描述： 我们刚才针对之前录入的 customer 的某条 id 为 1 的数据进行了更新，并扩充了其属性。值得注意的是，当我们执行更新操作时，es 实际上是对索引的文档进行了删除并重建的操作，并不是真正意义上的更新。
```

## 9. 删除文档
```bash
#bash命令
curl -XDELETE 'localhost:9200/customer/external/1?pretty?pretty'

#kibana命令
DELETE /customer/external/1?pretty

返回示例
{"found":true,"_index":"customer","_type":"external","_id":"1","_version":6,"_shards":{"total":2,"successful":1,"failed":0}}
```

## 10. 批量查询文档
```bash
#bash命令：
curl -XGET 'localhost:9200/customer/external/_search?pretty'

#kibana命令：
GET /customer/external/_search?pretty

返回示例
{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "2",
      "_score" : 1.0,
      "_source" : {
        "name" : "Tom",
        "age" : 20
      }
    }, {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "1",
      "_score" : 1.0,
      "_source" : {
        "name" : "John Doe"
      }
    } ]
  }
}
```

## 11. 字符串查询文档
```
#bash命令：
curl -XGET 'localhost:9200/customer/external/_search?q=name:Tom'

#kibana命令：
GET /customer/external/_search?q=name:Tom?pretty

返回示例
{"took":13,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score


            }
            // 否则就继续迭代
            if (!isSequentialReachable(sourceFlowElement, target, visitedElements)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断当前节点是否属于不同的子流程
     *
     * @param flowElement 被判断的节点
     * @return true 表示属于子流程
     */
    private static boolean isInEventSubprocess(FlowElement flowElement) {
        FlowElementsContainer flowElementsContainer = flowElement.getParentContainer();
        while (flowElementsContainer != null) {
            if (flowElementsContainer instanceof EventSubProcess) {
                return true;
            }

            if (flowElementsContainer instanceof FlowElement) {
                flowElementsContainer = ((FlowElement) flowElementsContainer).getParentContainer();
            } else {
                flowElementsContainer = null;
            }
        }
        return false;
    }

    /**
     * 根据正在运行的任务节点，迭代获取子级任务节点列表，向后找
     *
     * @param source          起始节点
     * @param runTaskKeyList  正在运行的任务 Key，用于校验任务节点是否是正在运行的节点
     * @param hasSequenceFlow 已经经过的连线的 ID，用于判断线路是否重复
     * @param userTaskList    需要撤回的用户任务列表
     * @return 子级任务节点列表
     */
    public static List<UserTask> iteratorFindChildUserTasks(FlowElement source, List<String> runTaskKeyList,
                                                            Set<String> hasSequenceFlow, List<UserTask> userTaskList) {
        hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow;
        userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList;
        // 如果该节点为开始节点，且存在上级子节点，则顺着上级子节点继续迭代
        if (source instanceof StartEvent && source.getSubProcess() != null) {
            userTaskList = iteratorFindChildUserTasks(source.getSubProcess(), runTaskKeyList, hasSequenceFlow, userTaskList);
        }

        // 根据类型，获取出口连线
        List<SequenceFlow> sequenceFlows = getElementOutgoingFlows(source);
        if (sequenceFlows == null) {
            return userTaskList;
        }
        // 循环找到目标元素
        for (SequenceFlow sequenceFlow : sequenceFlows) {
            // 如果发现连线重复，说明循环了，跳过这个循环
            if (hasSequenceFlow.contains(sequenceFlow.getId())) {
                continue;
            }
            // 添加已经走过的连线
            hasSequenceFlow.add(sequenceFlow.getId());
            // 如果为用户任务类型，且任务节点的 Key 正在运行的任务中存在，添加
            if (sequenceFlow.getTargetFlowElement() instanceof UserTask && runTaskKeyList.contains((sequenceFlow.getTargetFlowElement()).getId())) {
                userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement());
                continue;
            }
            // 如果节点为子流程节点情况，则从节点中的第一个节点开始获取
            if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
                List<UserTask> childUserTaskList = iteratorFindChildUserTasks((FlowElement) (((SubProcess


/***************************************************************************
 *  execution_thread.h - Execution thread for Golog++
 *
 *  Created: Mon 26 Aug 2019 CEST 15:38
 *  Copyright  2019  Victor Mataré <matare@fh-aachen.de>
 ****************************************************************************/

/*  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  Read the full text in the LICENSE.GPL file in the doc directory.
 */

#ifndef FAWKES_GOLOGPP_THREAD_H_
#define FAWKES_GOLOGPP_THREAD_H_

#include <aspect/blackboard.h>
#include <aspect/configurable.h>
#include <aspect/logging.h>
#include <blackboard/interface_listener.h>
#include <core/threading/thread.h>
#include <golog++/model/execution.h>

#include <filesystem>
#include <string>

namespace fawkes {
class SkillerInterface;
}

namespace fawkes {
namespace gpp {

class ExogManager;

class GologppThread : public Thread,
                      public LoggingAspect,
                      public BlackBoardAspect,
                      public ConfigurableAspect
{
public:
	GologppThread();

	virtual void init() override;
	virtual void once() override;

	virtual bool prepare_finalize_user() override;

	virtual void finalize() override;

	gologpp::ExecutionContext &gologpp_context();

private:
	std::filesystem::path                 find_prog_file(const std::filesystem::path &spec) const;
	std::unique_ptr<gologpp::Instruction> main_prog_;
	SkillerInterface                     *skiller_if_;
	ExogManager                          *exog_mgr_;
	std::mutex                            run_mutex_;
};

} // namespace gpp
} // namespace fawkes

#endif


ot_available: "Offline"
    - platform: mqtt
      name: "s31 Energy Yesterday"
      state_topic: "tele/s31/SENSOR"
      value_template: "{{ value_json['ENERGY'].Yesterday }}"
      unit_of_measurement: "kWh"
      availability_topic: "tele/s31/LWT"
      qos: 1
      payload_available: "Online"
      payload_not_available: "Offline"
    - platform: mqtt
      name: "s31 Energy Total"
      state_topic: "tele/s31/SENSOR"
      value_template: "{{ value_json['ENERGY'].Total }}"
      unit_of_measurement: "kWh"
      availability_topic: "tele/s31/LWT"
      qos: 1
      payload_available: "Online"
      payload_not_available: "Offline"
```
-->

<!-- tabs:end -->

<!-- tabs:start -->

!!! example "Covers"
For shutter position to persist in Home Assistant through device reboots, execute `PowerRetain 1`.

These sample configurations should allow the shutter work in Home Assistant. This is only an example and may need further modification to work in your environment.

This example uses a new configuration for roller shutters with options for positioning. It assumes that `%prefix%/%topic%/` is configured in the Tasmota Full Topic MQTT parameter.

```yaml
mqtt:
  cover:
    - name: "Balcony Blinds"
      availability_topic: "tele/%topic%/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"
      position_topic: stat/%topic%/Shutter1
      position_open: 100
      position_closed: 0
      set_position_topic: "cmnd/%topic%/ShutterPosition1"
      command_topic: "cmnd/%topic%/Backlog"
      payload_open: "ShutterOpen1"
      payload_close: "ShutterClose1"
      payload_stop: "ShutterStop1"
      retain: false
      optimistic: false
      qos: 1
```
Check [Issue 130](https://github.com/stefanbode/Sonoff-Tasmota/issues/130) for more information about this configuration.

Another integration example:
```yaml
mqtt:
  cover:
    - name: "Test"
      availability_topic: "tele/%topic%/LWT"
      state_topic: "stat/%topic%/RESULT"
      command_topic: "cmnd/%topic%/Backlog"
      value_template: '{{ value | int }}'
      qos: 1
      retain: false
      payload_open: "ShutterOpen1"
      payload_close: "ShutterClose1"
      payload_stop: "ShutterStop1"
      state_open: "ON"
      state_closed: "OFF"
      payload_available: "Online"
      payload_not_available: "Offline"
      optimistic: false
      tilt_command_topic: 'cmnd/%topic%/ShutterPosition1'
      tilt_status_topic: 'cmnd/%topic%/ShutterPosition1'
      set_position_topic: 'cmnd/%topic%/ShutterPosition1'
      position_topic: "stat/%topic%/SHUTTER1"
      tilt_min: 0
      tilt_max: 100
      tilt_closed_value: 0
      tilt_opened_value: 100
```
Integration example with position updated during movement (Tasmota versions >= v8.1.0.5):

```yaml
mqtt:
  cover:
    - name: "Balcony Blinds"
      availability_topic: "tele/%topic%/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"


-502        'Vstar'
      -550        'MARS-96'
      -550        'M96'
      -550        'MARS 96'
      -550        'MARS96'
      -750        'SPRINT-A'

Top

 Earth Orbiting Spacecraft.

   If an Earth orbiting spacecraft lacks a DSN identification code, the
   NAIF ID is derived from the tracking ID assigned to it by NORAD via:

      NAIF ID = -100000 - NORAD ID code

   For example, NORAD assigned the code 15427 to the NOAA 9 spacecraft.
   This code corresponds to the NAIF ID -115427.

Top

 Comet Shoemaker Levy 9

   In July, 1992 Comet Shoemaker Levy 9 passed close enough to the planet
   Jupiter that it was torn apart by gravitational tidal forces. As a
   result it became a satellite of Jupiter. However, in July 1994 the
   remnants of Shoemaker Levy 9 collided with Jupiter. Consequently, the
   fragments existed as satellites of Jupiter for only two years. These
   fragments were given the NAIF ID's listed below. Unfortunately, there
   have been two competing conventions selected for identifying the
   fragments of the comet. In one convention the fragments have been
   assigned numbers 1 through 21. In the second convention the fragments
   have been assigned letters A through W (with I and O unused). To add to
   the confusion, the ordering for the numbers is reversed from the letter
   ordering. Fragment 21 corresponds to letter A; fragment 20 to letter B
   and so on. Fragment A was the first of the fragments to collide with
   Jupiter; fragment W was the last to collide with Jupiter.

   The original fragments P and Q subdivided further creating the fragments
   P2 and Q1.

      NAIF ID     NAME                    SHOEMAKER-LEVY 9 FRAGMENT
      ________    ____________________    _________________________
      50000001    'SHOEMAKER-LEVY 9-W'    FRAGMENT 1
      50000002    'SHOEMAKER-LEVY 9-V'    FRAGMENT 2
      50000003    'SHOEMAKER-LEVY 9-U'    FRAGMENT 3
      50000004    'SHOEMAKER-LEVY 9-T'    FRAGMENT 4
      50000005    'SHOEMAKER-LEVY 9-S'    FRAGMENT 5
      50000006    'SHOEMAKER-LEVY 9-R'    FRAGMENT 6
      50000007    'SHOEMAKER-LEVY 9-Q'    FRAGMENT 7
      50000008    'SHOEMAKER-LEVY 9-P'    FRAGMENT 8
      50000009    'SHOEMAKER-LEVY 9-N'    FRAGMENT 9
      50000010    'SHOEMAKER-LEVY 9-M'    FRAGMENT 10
      50000011    'SHOEMAKER-LEVY 9-L'    FRAGMENT 11
      50000012    'SHOEMAKER-LEVY 9-K'    FRAGMENT 12
      50000013    'SHOEMAKER-LEVY 9-J'    FRAGMENT 13
      50000014    'SHOEMAKER-LEVY 9-H'    FRAGMENT 14
      50000015    'SHOEMAKER-LEVY 9-G'    FR


fit_Manager:IsWeaponOutfitSlotBackup(outfitSlot)
        return BACKUP_WEAPONS[outfitSlot] == true
    end
end

function Outfit_Manager:HasWeaponsCurrentlyHeldToOverride(actorCategory)
    local mainHandOutfitSlot, offHandOutfitSlot = GetOutfitSlotsForCurrentlyHeldWeapons(actorCategory)
    return mainHandOutfitSlot ~= nil or offHandOutfitSlot ~= nil
end

function Outfit_Manager:GetPreferredOutfitSlotForStyle(collectibleData)
    if collectibleData.clearAction then
        return collectibleData.preferredOutfitSlot
    else
        local eligibleSlots = { GetEligibleOutfitSlotsForCollectible(collectibleData:GetId()) }
        if #eligibleSlots > 0 then
            if collectibleData:IsArmorStyle() then
                return eligibleSlots[1]
            else
                for _, outfitSlot in ipairs(eligibleSlots) do
                    if self:IsWeaponOutfitSlotActive(outfitSlot) then
                        return outfitSlot
                    end
                end
            end
        end
    end
    return nil
end

function Outfit_Manager:GetShowLocked()
    return self.savedVars.showLockedStyles
end

function Outfit_Manager:SetShowLocked(showLocked)
    if showLocked ~= self.savedVars.showLockedStyles then
        self.savedVars.showLockedStyles = showLocked
        self:FireCallbacks("ShowLockedChanged")
    end
end

ZO_OUTFIT_MANAGER = Outfit_Manager:New()


      id->SetLocal().SetStr("seq"+NStr::IntToString(12+index*1000));
        id_list.push_back(id);
        id.Reset(new CSeq_id);
        id->SetGi(12+index*1000);
        id_list.push_back(id);

        // Instance (sequence data)
        CSeq_inst& inst = seq.SetInst();
        inst.SetRepr(CSeq_inst::eRepr_raw);
        inst.SetMol(CSeq_inst::eMol_dna);
        // length of sequence in residues
        inst.SetLength(40);
        // seq data in Iupacna
        inst.SetSeq_data().SetIupacna().Set(
            "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
        inst.SetStrand(CSeq_inst::eStrand_ds);

        // Add sub-entry
        seq_set.push_back(sub_entry);
    }}

    if ( sm_DumpEntries ) {
        NcbiCout << "-------------------- "
            "TestEntry1a --------------------" << NcbiEndl;
        unique_ptr<CObjectOStream>
            out(CObjectOStream::Open(eSerial_AsnText, NcbiCout));
        *out << *entry;
    }
    return *entry.Release();
}

/************************************************************************
    1.2.1.3. Bio sequences for testing
    Test entry = 1 top-level entry + 3 sub-entries
    TSE
        one annotation (Seq_feat), which refers to ids 12+1000i and 21+1000i
    1 sub-entry
        two Seq_ids: local and GI, (local id = 21+1000i)
        one description
        segmented sequence: references to
            an interval, ( id= 11+1000i)
            whole seq,   ( id= 12+1000i)
            self         ( id= 21+1000i)
        two annotations (Seq_feat)
            both - for an interval,  local Seq_id = 11+1000i
    2 sub-entry
        two Seq_ids: local and GI, (local id = 22+1000i)
        continuous sequence
    3 sub-entry
        two Seq_ids: local and GI, (local id = 23+1000i)
        continuous sequence
        conversion from one seq.data format to another
************************************************************************/
CSeq_entry& CDataGenerator::CreateTestEntry2(int index)
{
    // create top level seq entry
    CRef<CSeq_entry> entry(new CSeq_entry);
    CBioseq_set& set = entry->SetSet();
    // class = nucleic acid and coded proteins
    set.SetClass(CBioseq_set::eClass_nuc_prot);
    list< CRef<CSeq_entry> >& seq_set = set.SetSeq_set();

    // Sub-entry Seq 21
    {{
        CRef<CSeq_entry> sub_entry(new CSeq_entry);
        CBioseq& seq = sub_entry->SetSeq();
        CBioseq::TId& id_list = seq.SetId();

        // list of Ids (local + gi)
        CRef<CSeq_id> id(new CSeq_id);
        id->SetLocal().SetStr("seq"+NStr::IntToString(21+index*1000));
        id_list.push_back(id);
        id.Reset(new CSeq_id);
        id->SetGi(21+index*1000);
        id_list.push_back(id);

        // Description (name)
        list< CRef<CSeqdesc> >& descr1 = seq.SetDescr().Set();
        CRef<CSeqdesc> desc1(new CSeqdesc);
        desc1->SetName("D3 from bioseq 21-"+NStr::IntToString(index));
        descr1.push_back(desc1);

        // Instance (sequence data)
        CSeq_inst& inst = seq.SetInst();
        // representation class = segmented sequence
        inst.SetRepr(CSeq_inst::eRepr_seg);
        // molecule class in living organism = dna


TimeSpan delay)
        {
            if (context.TryGetPayload(out ServiceBusSendContext sendContext))
                sendContext.ScheduledEnqueueTimeUtc = DateTime.UtcNow + delay;
        }

        public static void SetSessionId(this SendContext context, string sessionId)
        {
            if (context.TryGetPayload(out ServiceBusSendContext sendContext))
                sendContext.SessionId = sessionId;
        }

        public static void SetReplyToSessionId(this SendContext context, string sessionId)
        {
            if (context.TryGetPayload(out ServiceBusSendContext sendContext))
                sendContext.ReplyToSessionId = sessionId;
        }

        public static void SetReplyTo(this SendContext context, string replyTo)
        {
            if (context.TryGetPayload(out ServiceBusSendContext sendContext))
                sendContext.ReplyTo = replyTo;
        }

        public static void SetLabel(this SendContext context, string label)
        {
            if (context.TryGetPayload(out ServiceBusSendContext sendContext))
                sendContext.Label = label;
        }
    }
}


/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 *
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 *
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 *
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.] */

#include <openssl/asn1.h>
#include <openssl/dsa.h>
#include <openssl/ec_key.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/rsa.h>

int i2d_PrivateKey(const EVP_PKEY *a, uint8_t **pp) {
  switch (EVP_PKEY_id(a)) {
    case EVP_PKEY_RSA:
      return i2d_RSAPrivateKey(EVP_PKEY_get0_RSA(a), pp);
    case EVP_PKEY_EC:
      return i2d_ECPrivateKey(EVP_PKEY_get0_EC_KEY(a), pp);
    case EVP_PKEY_DSA:
      return i2d_DSAPrivateKey(EVP_PKEY_get0_DSA(a), pp);
    default:
      // Although this file is in crypto/x509 for layering reasons, it emits
      // an error code from ASN1 for OpenSSL compatibility.
      OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
      return -1;
  }
}


1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);}.ksb.sbm{height:20px;line-height:18px;min-width:35px}.ksb.sbf{height:21px;line-height:21px;min-width:35px}.ksb.left{-webkit-border-radius:2px 0 0 2px}.ksb.mid{-webkit-border-radius:0;margin-left:-1px}.ksb.right{-webkit-border-radius:0 2px 2px 0;margin-left:-1px}.sbc,.sbm.sbc,.sbf.sbc{padding:0 2px;min-width:30px}#sbfrm_l{visibility:inherit !important}#rcnt{margin-top:0px;}#appbar,#rhscol{min-width:1100px}#top_nav{min-width:1100px}#appbar{background:white;-webkit-box-sizing:border-box;width:100%}.ab_wrp{height:57px;border-bottom:1px solid #ebebeb}#main{width:100%}#ab_name,#ab_shopping{color:#dd4b39;font:20px "Arial";margin-left:15px;position:absolute;top:17px}#ab_name a{color:#999}#ab_shopping a{color:#dd4b39}#ab_ctls{float:right;position:relative;right:29px;z-index:3;line-height:1;padding-top:27px}.ab_ctl{display:inline-block;position:relative;margin-left:16px;}.ab_ctl.action-menu{margin-top:1px;vertical-align:middle}#hdtbSum .ab_ctl{vertical-align:baseline}a.ab_button,a.ab_button:visited{display:inline-block;color:#444;margin-top:1px}a.ab_button:hover{color:#222}#appbar a.ab_button:active,a.ab_button.selected,a.ab_button.selected:hover{color:#333}.ab_button.selected:focus{border-color:#ccc}.ab_button:hover>span.ab_icon{opacity:0.9}.ab_dropdown{background:#fff;border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.2);font-size:13px;padding:6px 0;position:absolute;right:0;top:32px;white-space:nowrap;z-index:3;-moz-transition:opacity 0.218s;transition:opacity 0.218s;-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2)}.ab_dropdown:focus,.ab_dropdownitem:focus,.ab_dropdownitem a:focus{outline:none}.ab_dropdownitem{margin:0;padding:0;-moz-user-select:none;}.ab_dropdownitem.selected{background-color:#eee}.ab_dropdownitem.checked{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);background-position:left center;background-repeat:no-repeat}.ab_dropdownitem.disabled{cursor:default;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);pointer-events:none}a.ab_dropdownitem.disabled{color:#b8b8b8}.ab_dropdownitem.active{-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.ab_dropdownlnk,.ab_dropdownlnkinfo{display:block;padding:8px 20px 8px 16px}a.ab_dropdownlnk,a.ab_dropdownlnk:visited,a.ab_dropdownlnk:hover,#appbar a.ab_dropdo


]
v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,1,0]
// CHECK: encoding: [0x00,0x44,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,0,1]
// CHECK: encoding: [0x00,0x43,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[1,1,0]
// CHECK: encoding: [0x00,0x45,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[1,0,1]
// CHECK: encoding: [0x00,0x47,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[1,1,1]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0x3c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,0,0] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0x5c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,1,0] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0x9c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,1] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0x7c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,1,0] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0xbc]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,0,1] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x40,0xa3,0xd3,0x01,0x05,0x0e,0xfc]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[1,1,1] neg_hi:[0,0,0]
// CHECK: encoding: [0x00,0x41,0xa3,0xd3,0x01,0x05,0x0e,0x1c]
v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0] neg_hi:[1,0,0]
// CHECK: encoding: [0x00