dict.items():
        if key in proxy_name:
            proxy_group["proxies"].append(proxy_name)

def generate_singbox_config(proxies, template_url):
    outbounds = []
    selectors = []

    for proxy in proxies:
        outbound = convert_proxy_to_singbox_outbound(proxy)
        if outbound:
            outbounds.append(outbound)
            selectors.append(proxy["name"])

    # 添加 selector 出口（自动选择节点）
    idx = 0
    for country in ["香港", "美国", "日本", "狮城", "台湾", "韩国", "伦敦", "德国", "加拿大"]:
        outbound_list_by_county = [n for n in selectors if country in n]
        for level in ["日用", "标准", "高级"]:
            urltest_tag = f"{country} {level} urltest"
            outbound_list = [n for n in outbound_list_by_county if level in n]
            if len(outbound_list) > 0:
                outbounds.insert(idx, {
                    "type": "urltest",
                    "tag": urltest_tag,
                    "outbounds": outbound_list
                })
                selectors.insert(idx,urltest_tag)
                idx += 1
    outbounds.insert(0, {
        "type": "selector",
        "tag": "openai",
        "outbounds": ["日本 高级 urltest", "美国 高级 urltest"]
    })
    outbounds.insert(0, {
        "type": "selector",
        "tag": "tiktok",
        "outbounds": ["日本 高级 urltest", "美国 高级 urltest"]
    })
    outbounds.insert(0, {
        "type": "selector",
        "tag": "select",
        "outbounds": selectors,
        "default": "日本 日用 urltest"
    })
    outbounds.insert(0, {
        "type": "direct",
        "tag": "direct"
    })

    try:
        template_r = requests.get(template_url)
    except:
        print("get template failed")

    try:
        template_r
        config = yaml.load(template_r.content, Loader=SafeLoader)
    except:
        config = base_config

    config["outbounds"] = outbounds

    return config

def dump_singbox_config_with_flat_outbounds(config):
    # 取出并处理 outbounds
    outbounds = config.pop("outbounds", [])

    # 将其他部分正常序列化为 JSON（含缩进）
    config_str = json.dumps(config, indent=2, ensure_ascii=False)

    # 单行压缩每个 outbound
    outbounds_strs = [json.dumps(o, separators=(',', ':'), ensure_ascii=False) for o in outbounds]
    formatted_outbounds = []
    for ob in outbounds:
        if ob.get("type") == "shadowsocks" or ob.get("type") == "trojan":
            formatted = "  " + json.dumps(ob, separators=(",", ":"), ensure_ascii=False)
        else:
            formatted = json.dumps(ob, indent=2, ensure_ascii=False)
            # 缩进调整（因为外部是 indent=2）
            formatted = "\n  " + formatted.replace("\n", "\n  ")
        formatted_outbounds.append(formatted)
    outbounds_block = ",\n  \"outbounds\": [" + ",\n".join(formatted_outbounds) + "\n  ]"

    # 插入回配置中
    insert_point = config_str.rfind("}")
    insert_point = config_str.rfind("\n", insert_point - 1)
    final_json = config_str[:insert_point] + outbounds_block + "\n}"

    return final_json

def update_config():
    print("Step 1: get subscription")
    url = sys.argv[1]
    template_url = sys.argv[2]
    try:
        r = requests.get(url)
    except:
        print("get failed")

    print("Step 2: parse subscription")
    try:
        r
        # Parse from url content
        config_subs = yaml.load(r.content, Loader=SafeLoader)
    except:
        # Parse from file for debug
        f = open("Orig_Clash.yaml", 'r', encoding='utf-8')
        config_subs = yaml.load(f, Loader=SafeLoader)

    config_clash = copy.deepcopy(config_subs)
    # now = datetime.datetime.now()
    # time_str = now.strftime("%Y-%m-%d-%H-%M-%S")
    # subs_yaml_filename = "Clash_"+time_str+".yaml"
    # with open(subs_yaml_filename, 'w', encoding='utf-8') as fh_subs:
    #     yaml.dump(config_subs, fh_subs, Dumper=MyDumper, allow_unicode=True, sort_keys=False)

    # print("Step 3: Load config")
    # config_fr = open("clash_config.yaml", 'r', encoding='utf-8')
    # config_fw = open("clash_config_w.yaml", 'w', encoding='utf-8')
    # config_clash = yaml.load(config_fr, Loader=SafeLoader)

    # convert_proxy_to_singbox_outbound

    # print("Step 4: Compare and Update")
    # new_nodes = []
    # for proxy_sub in config_subs["proxies"]:
    #     proxy_name = proxy_sub["name"]
    #     print("==============", proxy_name)
    #     is_new = True
    #     for index, proxy in enumerate(config_clash["proxies"]):
    #         if proxy_name == proxy["name"]:
    #             print("Origin conf")
    #             print(proxy)
    #


4px;
  text-align: center;
  cursor: pointer;
}

.amis-scope td.rdtMonth > span,
.amis-scope td.rdtYear > span,
.amis-scope td.rdtQuarter > span {
  width: 48px;
}

.amis-scope td.rdtMonth:hover,
.amis-scope td.rdtYear:hover,
.amis-scope td.rdtQuarter:hover {
  background: #eee;
}

.amis-scope .rdtCounters {
  display: inline-block;
}

.amis-scope .rdtCounters > div {
  float: left;
}

.amis-scope .rdtCounter {
  height: 100px;
}

.amis-scope .rdtCounter {
  width: 40px;
}

.amis-scope .rdtCounterSeparator {
  line-height: 100px;
}

.amis-scope .rdtCounter .rdtBtn {
  height: 40%;
  line-height: 40px;
  cursor: pointer;
  display: block;
  -webkit-touch-callout: none;
  /* iOS Safari */
  -webkit-user-select: none;
  /* Chrome/Safari/Opera */
  -khtml-user-select: none;
  /* Konqueror */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* Internet Explorer/Edge */
  user-select: none;
}

.amis-scope .rdtCounter .rdtBtn:hover {
  background: #eee;
}

.amis-scope .rdtCounter .rdtCount {
  height: 20%;
  font-size: 1.2em;
}

.amis-scope .rdtMilli {
  vertical-align: middle;
  padding-left: 8px;
  width: 48px;
}

.amis-scope .rdtMilli input {
  width: 100%;
  font-size: 1.2em;
  margin-top: 37px;
}

.amis-scope .rdtTime td {
  cursor: default;
}

/* Reset
  =============== */

.amis-scope {
  box-sizing: border-box;
}

.amis-scope *,
.amis-scope *::before,
.amis-scope *::after {
  box-sizing: inherit;
}

.amis-scope figure {
  margin: 0;
}

/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */

/* Document
   ========================================================================== */

/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in iOS.
 */

.amis-scope {
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
}

/* Sections
     ========================================================================== */

/**
   * Remove the margin in all browsers.
   */

.amis-scope {
  margin: 0;
}

/**
   * Correct the font size and margin on `h1` elements within `section` and
   * `article` contexts in Chrome, Firefox, and Safari.
   */

.amis-scope h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/* Grouping content
     ========================================================================== */

/**
   * 1. Add the correct box sizing in Firefox.
   * 2. Show the overflow in Edge and IE.
   */

.amis-scope hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}

/**
   * 1. Correct the inheritance and scaling of font size in all browsers.
   * 2.


 (object) foundObj;

                if (foundObj.ObjectID == obj.ObjectID)
                {
                    RemoveAt(idx);
                    foundObj.ObjectID = tag;
                    InsertSortedObject(foundObj);
                }
                else
                {
                }
            }
        }

        public ICCSortableObject ObjectWithObjectID(int tag)
        {
            if (Count == 0)
            {
                return null;
            }

            ICCSortableObject foundObj;

            foundObj = new CCSortedObject();
            foundObj.ObjectID = tag;

            int idx = IndexOfSortedObject(foundObj);

            foundObj = null;

            if (idx < Count && idx != CC_INVALID_INDEX)
            {
                foundObj = (ICCSortableObject) (this[idx]);
                if (foundObj.ObjectID != tag)
                {
                    foundObj = null;
                }
            }

            return foundObj;
        }

        /*!
		 * Returns an object with given key and value.
		 *
		 * Returns an object with given key and value. If no object is found,
		 * it returns nil.
		 *
		 * @param value to locate object
		 * @return object found or nil.
		 */
        //public CCSortableObject getObjectWithObjectID(int tag)
        //{
        //}

        /*!
		 * Returns an index of the object with given key and value.
		 *
		 * Returns the index of an object with given key and value.
		 * If no object is found, it returns an index at which the given object value
		 * would have been located. If object must be located at the end of array,
		 * it returns the length of the array, which is out of bound.
		 *
		 * @param value to locate object
		 * @return index of an object found
		 */

        public int IndexOfSortedObject(ICCSortableObject obj)
        {
            int idx = 0;
            if (obj != null)
            {
                //       object* pObj = (object*)bsearch((object*)&object, data->arr, data->num, sizeof(object*), _compareObject);
                // FIXME: need to use binary search to improve performance
                int uPrevObjectID = 0;
                int uOfSortObjectID = obj.ObjectID;

                foreach (object pObj in this)
                {
                    var pSortableObj = (ICCSortableObject) pObj;

                    int uCurObjectID = pSortableObj.ObjectID;
                    if ((uOfSortObjectID == uCurObjectID)
                        || (uOfSortObjectID >= uPrevObjectID && uOfSortObjectID < uCurObjectID))
                    {
                        break;
                    }

                    uPrevObjectID = uCurObjectID;
                    idx++;
                }
            }
            else
            {
                idx = CC_INVALID_INDEX;
            }
            return idx;
        }
    };
}


eakpointSystemEntry(
    range: RangeValues(960, 1023),
    landscape: 'small tablet',
    adaptiveWindowType: AdaptiveWindowType.small,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
  BreakpointSystemEntry(
    range: RangeValues(1024, 1279),
    landscape: 'large tablet',
    adaptiveWindowType: AdaptiveWindowType.medium,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
  BreakpointSystemEntry(
    range: RangeValues(1280, 1439),
    landscape: 'large tablet',
    adaptiveWindowType: AdaptiveWindowType.medium,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
  BreakpointSystemEntry(
    range: RangeValues(1440, 1599),
    portrait: 'small handset',
    adaptiveWindowType: AdaptiveWindowType.large,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
  BreakpointSystemEntry(
    range: RangeValues(1600, 1919),
    portrait: 'small handset',
    adaptiveWindowType: AdaptiveWindowType.large,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
  BreakpointSystemEntry(
    range: RangeValues(1920, double.infinity),
    portrait: 'small handset',
    adaptiveWindowType: AdaptiveWindowType.xlarge,
    columns: 12,
    margin: 24.0,
    gutter: 24.0,
  ),
];

/// Returns the [AdaptiveWindowType] to the user.
///
/// This is useful when the user wants to compare the MediaQuery to the current
/// window size.
AdaptiveWindowType getWindowType(BuildContext context) {
  return getBreakpointEntry(context).adaptiveWindowType;
}

/// Returns the [BreakpointSystemEntry] to the user.
///
/// Typically the developer will use the getWindowType function. Using this
/// function gives the developer access to the specific breakpoint entry and
/// it's variables.
BreakpointSystemEntry getBreakpointEntry(BuildContext context) {
  double width = MediaQuery.sizeOf(context).width;
  for (BreakpointSystemEntry entry in breakpointSystem) {
    if (entry.range.start <= width && width < entry.range.end + 1) {
      return entry;
    }
  }
  throw AssertionError('Something unexpected happened');
}
// Copyright 2022 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../../shared/classes/classes.dart';
import '../../../shared/extensions.dart';
import '../../../shared/playback/bloc/bloc.dart';
import '../../../shared/views/image_clipper.dart';
import '../../../shared/views/views.dart';

class PlaylistSongs extends StatelessWidget {
  const PlaylistSongs({
    super.key,
    required this.playlist,
    required this.constraints,
  });

  final Playlist playlist;
  final BoxConstraints constraints;

  @override
  Widget build(BuildContext context) {
    return AdaptiveTable<Song>(
      items: playlist.songs,
      breakpoint: 450,
      columns: const [
        DataColumn(
          label: Padding(padding: EdgeInsets.only(left: 20), child: Text('#')),
        ),
        DataColumn(label: Text('Title')),
        DataColumn(
          label: Padding(
            padding: EdgeInsets.only(right: 10),
            child: Text('Length'),
          ),
        ),
      ],
      rowBuilder: (context, index) => DataRow.byIndex(
        index: index,
        cells: [
          DataCell(
            Center


Q3, typename ::boost::move_detail::forward_type<Q3>::type
#define BOOST_MOVE_FWD_TQ5 BOOST_MOVE_FWD_TQ4, typename ::boost::move_detail::forward_type<Q4>::type
#define BOOST_MOVE_FWD_TQ6 BOOST_MOVE_FWD_TQ5, typename ::boost::move_detail::forward_type<Q5>::type
#define BOOST_MOVE_FWD_TQ7 BOOST_MOVE_FWD_TQ6, typename ::boost::move_detail::forward_type<Q6>::type
#define BOOST_MOVE_FWD_TQ8 BOOST_MOVE_FWD_TQ7, typename ::boost::move_detail::forward_type<Q7>::type
#define BOOST_MOVE_FWD_TQ9 BOOST_MOVE_FWD_TQ8, typename ::boost::move_detail::forward_type<Q8>::type

//BOOST_MOVE_MREFX
#define BOOST_MOVE_MREF0
#define BOOST_MOVE_MREF1                  BOOST_MOVE_MREF(P0) m_p0;
#define BOOST_MOVE_MREF2 BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P1) m_p1;
#define BOOST_MOVE_MREF3 BOOST_MOVE_MREF2 BOOST_MOVE_MREF(P2) m_p2;
#define BOOST_MOVE_MREF4 BOOST_MOVE_MREF3 BOOST_MOVE_MREF(P3) m_p3;
#define BOOST_MOVE_MREF5 BOOST_MOVE_MREF4 BOOST_MOVE_MREF(P4) m_p4;
#define BOOST_MOVE_MREF6 BOOST_MOVE_MREF5 BOOST_MOVE_MREF(P5) m_p5;
#define BOOST_MOVE_MREF7 BOOST_MOVE_MREF6 BOOST_MOVE_MREF(P6) m_p6;
#define BOOST_MOVE_MREF8 BOOST_MOVE_MREF7 BOOST_MOVE_MREF(P7) m_p7;
#define BOOST_MOVE_MREF9 BOOST_MOVE_MREF8 BOOST_MOVE_MREF(P8) m_p8;

//BOOST_MOVE_MREFQX
#define BOOST_MOVE_MREFQ0
#define BOOST_MOVE_MREFQ1                   BOOST_MOVE_MREFQ(Q0) m_q0;
#define BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ1 BOOST_MOVE_MREFQ(Q1) m_q1;
#define BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ(Q2) m_q2;
#define BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ(Q3) m_q3;
#define BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ(Q4) m_q4;
#define BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ(Q5) m_q5;
#define BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ(Q6) m_q6;
#define BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ(Q7) m_q7;
#define BOOST_MOVE_MREFQ9 BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ(Q8) m_q8;

//BOOST_MOVE_MEMBX
#define BOOST_MOVE_MEMB0
#define BOOST_MOVE_MEMB1                  P0 m_p0;
#define BOOST_MOVE_MEMB2 BOOST_MOVE_MEMB1 P1 m_p1;
#define BOOST_MOVE_MEMB3 BO


eturn Stroke._create(t =>
		{
			/** The input of the transformation function. */
			const point = this._evaluator(t);
			// Merge the output, passing a copy to prevent mutation.
			return Object.assign(point, f(Object.assign({}, point)));
		});
	}

	/**
	 * Transforms the input parameter of the stroke.
	 * @param f The function to transform the input parameter by.
	 */
	slide(f: (t: number) => number): Stroke
	{
		return Stroke._create(t => this._evaluator(f(t)));
	}

	/**
	 * Cuts the input parameter of the stroke to within the given bounds.
	 * @param t0 The beginning of the interval to include.
	 * @param t1 The end of the interval to include.
	 */
	cut(t0: number, t1: number): Stroke
	{
		return this.slide(t => t * (t1 - t0) + t0);
	}

	/**
	 * Sets some or all of the stroke properties to constant values.
	 * @param point The values to set.
	 */
	fix(point: LinePointPartial): Stroke
	{
		return Stroke._create(t => Object.assign({}, this._evaluator(t), point))
	}

	/**
	 * Creates a bezier curve through any set of properties.
	 * @param start The starting point.
	 * @param points The bezier control points and end point.
	 */
	bezier(start: LinePointPartial, ...points: LinePointPartial[]): Stroke;
	/**
	 * Creates a bezier curve through any set of properties.
	 * @param points The bezier control points.
	 */
	bezier(...points: LinePointPartial[]): Stroke
	{
		/** The list of each object's properties. */
		const propsList = points.map(p => new Set(Object.keys(p)));
		/** The intersection of all objects, which is used for bezier interpolation. */
		const props = [...propsList[0].values()].filter(p => propsList.every(s => s.has(p)));

		return Stroke._create(t =>
		{
			/** The interpolated point. */
			const result = {};
			for (const prop of props)
			{
				(<any>result)[prop] = bezier(t, points.map(p => (<any>p)[prop]))
			}
			return Object.assign({}, this._evaluator(t), result);
		});
	}

	/**
	 * Creates a straight line between two points with any set of properties.
	 * @param start The starting point.
	 * @param end The ending point.
	 */
	line(start: LinePointPartial, end: LinePointPartial): Stroke
	{
		return this.bezier(start, end);
	}

	/**
	 * Creates an elliptical stroke.
	 * @param x The X coordinate of the center.
	 * @param y The Y coordinate of the center.
	 * @param rx The radius in the X direction.
	 * @param ry The radius in the Y direction.
	 * @param start The angle the stroke starts from, in radians.
	 * @param ccw True to reverse the direction of rotation to counter-clockwise.
	 * @param form The method used to measure angles in the ellipse. "parametric": The standard parametric angle. "polar": The angle with the X axis. "tangent": The tangent angle of the curve.
	 */
	ellipse(x: number, y: number, rx: number, ry: number, start: number = 0, ccw: boolean = false, form: "parametric" | "polar" | "tangent" = "parametric"): Stroke
	{
		/** The resulting stroke. */
		let result = this.parametric(t =>
		({
			x: x + rx * Math.cos((ccw ? -t : t) * 2 * Math.PI),
			y: y + ry * Math.sin((ccw ? -t : t) * 2 * Math.PI)
		}));

		switch (form)
		{
			case "parametric":
				break;
			case "polar":
				result = result.slide(slideEllipse


,

   minor7 = { "min7", "m7" },
   minor9 = { "min9", "m9" },
   minor11 = { "min11", "m11" },
   minor13 = { "min13", "m13" },

   sixNine = { "six9", "sixby9", "6by9" },

   sevenFlat5 = "7f5",
   sevenSharp5 = "7s5",
   sevenFlat9 = "7f9",
   minorSharp5 = { "msharp5", "mS5" },
   minor6 = { "min6", "m6" },
   minorSixNine = { "minor69", "min69", "minSixNine", "m69", "mSixNine", "m6by9" },

   minor7flat5 = { "minor7f5", "min7flat5", "m7flat5", "m7f5" },
   minor7sharp5 = { "minor7s5", "min7sharp5", "m7sharp5", "m7s5" },
   minor7flat9 = { "minor7f9", "min7flat9", "m7flat9", "min7f9", "m7f9" },
   minor7sharp9 = { "minor7s9", "min7sharp9", "m7sharp9", "min7s9", "m7s9" },
   minor9sharp5 = { "minor9s5", "min9sharp5", "min9s5", "m9sharp5", "m9s5" },
   minor7sharp5flat9 = "m7sharp5flat9",
   minor11sharp = "m11s",

   sevenSus2 = "7sus2",
   sevenSus4 = "7sus4",
   nineSus4 = { "ninesus4", "9sus4" },
   sevenFlat10 = "7f10",
   nineSharp5 = { "9sharp5", "9s5" },
   sevenSharp5flat9 = "7s5f9",
   elevenSharp = "11s",

   minorMajor7 = { "minMaj7", "mmaj7" },
}

local alias_lookup = {}

for k, v in pairs(alias) do
   if type(v) == "table" then
      for _, al in ipairs(v) do
         alias_lookup[al] = k
      end
   else
      alias_lookup[v] = k
   end
end

setmetatable(chordTable, {
   __index = function(t, k)
      return t[alias_lookup[k]]
   end,
})

local token = function(id)
   return Ct(Cc(id) * C(V(id)))
end
local note = token "note"
local chordname = token "chordname"
local chordmods = token "chordmods"
local notename = token "notename"
local notemods = token "notemods"
local range = token "range"
local open = token "open"
local drop = token "drop"
local invert = token "invert"
local offset = token "offset"
local octave = token "octave"
local number = token "number"
local sep = V "sep"

local grammar = {
   [1] = "chord",
   chord = note * sep ^ -1 * chordname ^ -1 * chordmods ^ -1,
   note = notename * notemods ^ -1,
   chordname = R("az", "09") ^ 1,
   chordmods = (sep * (range + open + drop + invert)) ^ 0,
   notename = R "ag",
   notemods = offset ^ -1 * octave ^ -1,
   offset = S "sfn",
   octave = R "05",
   range = number,
   open = P "o",
   drop = P "d" * number,
   invert = P "i" * number,
   number = R


--[[
  Upbit Open API

  ## REST API for Upbit Exchange - Base URL: [https://api.upbit.com] - Official Upbit API Documents: [https://docs.upbit.com] - Official Support email: [open-api@upbit.com]

  OpenAPI spec version: 1.0.0
  Contact: ujhin942@gmail.com
  Generated by: https://github.com/swagger-api/swagger-codegen.git
]]

-- order_info class
local order_info = {}
local order_info_mt = {
	__name = "order_info";
	__index = order_info;
}

local function cast_order_info(t)
	return setmetatable(t, order_info_mt)
end

local function new_order_info(uuid, side, ord_type, price, state, market, created_at, volume, remaining_vol


obot','State','Commanded'): ", r.GetPose(task_space="World", kinematics="Robot", state="Commanded"))
    print("GetPose(task_space='World',kinematics='Calculated','State','Commanded'): ", r.GetPose(task_space="World", kinematics="Calculated", state="Commanded"))
    print("GetPose(task_space='World',kinematics='Robot'): ", r.GetPose(task_space="World", kinematics="Robot"))
    print("GetPose(task_space='World',kinematics='Calculated'): ", r.GetPose(task_space="World", kinematics="Calculated"))

    print("IKin:", r.IKin(map_pose(p=[0.5, 0.2, 0.5], Q=rot_x(np.pi)), r.q_home))

    print("Pose: ", r.GetPose())

    r.GetVel()

    print("FT: ", r.GetFT())


 Sunderseer Mantle
				{ 3, 44103 }, -- Exceptional Stormshroud Shoulders
				{ 4, 44105 }, -- Lasting Feralheart Spaulders
				{ 6, 44102 }, -- Aged Pauldrons of The Five Thunders
				{ 7, 44101 }, -- Prized Beastmaster's Mantle
				{ 9, 44100 }, -- Pristine Lightforge Spaulders
				{ 10, 44099 }, -- Strengthened Stockade Pauldrons
				{ 12, AtlasLoot:GetRetByFaction(44097, 44098) }, -- Inherited Insignia of the Horde / Inherited Insignia of the Alliance
				{ 14, 44115 }, -- Wintergrasp Commendation
				{ 16, 44091 }, -- Sharpened Scarlet Kris
				{ 17, 44096 }, -- Battleworn Thrash Blade
				{ 18, 44092 }, -- Reforged Truesilver Champion
				{ 19, 44094 }, -- The Blessed Hammer of Grace
				{ 20, 44095 }, -- Grand Staff of Jordan
				{ 21, 44093 }, -- Upgraded Dwarven Hand Cannon
			}
		},
		{ -- Mounts
			name = ALIL["Mounts"],
			[NORMAL_DIFF] = {
				{ 1, AtlasLoot:GetRetByFaction(44077, 43956) }, -- Reins of the Black War Mammoth
			}
		},
	},
}


b72e34ed479848b0, %r1, %r25
	setx  0x44d02635314bfd71, %r1, %r26
	setx  0x54cea11c1c669d05, %r1, %r27
	setx  0xd83841cdfed24c54, %r1, %r28
	setx  0x6aa32d0e64f69eb3, %r1, %r29
	setx  0x4c62a39fde1086a5, %r1, %r30
	setx  0x5fe7f10ace511051, %r1, %r31
	setx  MAIN_BASE_DATA_VA, %r1, %r4
	setx  0x0000000000000d00, %r1, %r5
	wr %r0, 0x4, %fprs
	ldd	[%r4 + 0], %f0
	ldd	[%r4 + 8], %f2
	ldd	[%r4 + 16], %f4
	ldd	[%r4 + 24], %f6
	ldd	[%r4 + 32], %f8
	ldd	[%r4 + 40], %f10
	ldd	[%r4 + 48], %f12
	ldd	[%r4 + 56], %f14
	ldd	[%r4 + 64], %f16
	ldd	[%r4 + 72], %f18
	ldd	[%r4 + 80], %f20
	ldd	[%r4 + 88], %f22
	ldd	[%r4 + 96], %f24
	ldd	[%r4 + 104], %f26
	ldd	[%r4 + 112], %f28
	ldd	[%r4 + 120], %f30
	ldd	[%r4 + 128], %f32
	ldd	[%r4 + 136], %f34
	ldd	[%r4 + 144], %f36
	ldd	[%r4 + 152], %f38
	ldd	[%r4 + 160], %f40
	ldd	[%r4 + 168], %f42
	ldd	[%r4 + 176], %f44
	ldd	[%r4 + 184], %f46
	ldd	[%r4 + 192], %f48
	ldd	[%r4 + 200], %f50
	ldd	[%r4 + 208], %f52
	ldd	[%r4 + 216], %f54
	ldd	[%r4 + 224], %f56
	ldd	[%r4 + 232], %f58
	ldd	[%r4 + 240], %f60
	ldd	[%r4 + 248], %f62
	setx  0x80, %r2, %r1
	wr  %r1, %r0, %asi
	ta T_CHANGE_HPRIV !To allow ASI writes to D-I caches
	.word 0xfc290005  ! 12: STB_R	stb	%r30, [%r4 + %r5]
	.word 0xf8710005  ! 12: STX_R	stx	%r28, [%r4 + %r5]
	.word 0xf63124ac  ! 12: STH_I	sth	%r27, [%r4 + 0x04ac]
	.word 0xf2210005  ! 12: STW_R	stw	%r25, [%r4 + %r5]
	.word 0xee210005  ! 12: STW_R	stw	%r23, [%r4 + %r5]
	.word 0xfc312ca8  ! 12: STH_I	sth	%r30, [%r4 + 0x0ca8]
	.word 0xf0212a60  ! 12: STW_I	stw	%r24, [%r4 + 0x0a60]


fn dep_installed(d: &str) -> bool {
    if let Err(e) = std::process::Command::new(d)
        .arg("-h")
        .stdout(std::process::Stdio::null())
        .stderr(std::process::Stdio::null())
        .spawn()
    {
        if e.kind() == std::io::ErrorKind::NotFound {
            return false;
        }
    }
    true
}
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::rc::Rc;
use std::str::FromStr;
use structopt::StructOpt;
use thiserror::Error;

use crate::app::TransportWrapper;
use crate::impl_serializable_error;
use crate::util::voltage::Voltage;

#[derive(Clone, Debug, StructOpt, Serialize, Deserialize)]
pub struct SpiParams {
    #[structopt(long, help = "SPI instance", default_value = "0")]
    pub bus: String,

    #[structopt(long, help = "SPI bus speed")]
    pub speed: Option<u32>,

    #[structopt(long, help = "SPI bus voltage", parse(try_from_str = Voltage::from_str))]
    pub voltage: Option<Voltage>,

    #[structopt(long, help = "SPI polarity/phase mode", parse(try_from_str = TransferMode::from_str))]
    pub mode: Option<TransferMode>,
}

impl SpiParams {
    pub fn create(&self, transport: &TransportWrapper) -> Result<Rc<dyn Target>> {
        let spi = transport.spi(&self.bus)?;
        if let Some(speed) = self.speed {
            spi.set_max_speed(speed)?;
        }
        if let Some(voltage) = self.voltage {
            spi.set_voltage(voltage)?;
        }
        if let Some(mode) = self.mode {
            spi.set_transfer_mode(mode)?;
        }
        Ok(spi)
    }
}

/// Errors related to the SPI interface and SPI transactions.
#[derive(Error, Debug, Serialize, Deserialize)]
pub enum SpiError {
    #[error("Invalid option: {0}")]
    InvalidOption(String),
    #[error("Invalid word size: {0}")]
    InvalidWordSize(u32),
    #[error("Invalid speed: {0}")]
    InvalidSpeed(u32),
    #[error("Invalid data length: {0}")]
    InvalidDataLength(usize),
    #[error("Mismatched data length: {0} != {1}")]
    MismatchedDataLength(usize, usize),
    #[error("Invalid transfer mode: {0}")]
    InvalidTransferMode(String),
}
impl_serializable_error!(SpiError);

/// Represents the SPI transfer mode.
/// See https://en.wikipedia.org/wiki/Serial_Peripheral_Interface#Clock_polarity_and_phase
/// for details about SPI transfer modes.
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum TransferMode {
    /// `Mode0` is CPOL=0, CPHA=0.
    Mode0,
    /// `Mode1` is CPOL=0, CPHA=1.
    Mode1,
    /// `Mode2` is CPOL=1, CPHA=0.
    Mode2,
    /// `Mode3` is CPOL=1, CPHA=1.
    Mode3,
}

impl FromStr for TransferMode {
    type Err = SpiError;
    fn from_str(s: &str) -> std::result::Result<TransferMode, Self::Err> {
        match s {
            "Mode0" | "mode0" | "0" => Ok(TransferMode::Mode0),
            "Mode1" | "mode1" | "1" => Ok(TransferMode::Mode1),
            "Mode2" | "mode2" | "2" => Ok(TransferMode::Mode2),
            "Mode3


charts[app].data.datasets[0].data = history.packet_count;
                            charts[app].data.datasets[1].data = history.bytes;
                            charts[app].update();
                        }
                    }
                }
            }
        });

        // 监控连接状态
        socket.on('connect', function() {
            console.log('Socket.IO connected');
        });

        socket.on('disconnect', function(reason) {
            console.log('Socket.IO disconnected:', reason);
        });

        // 处理连接错误
        socket.on('connect_error', function(error) {
            console.error('Socket.IO connection error:', error);
        });

    </script>

<!DOCTYPE html>

<meta charset="utf-8"/>
<link crossorigin="" href="https://fonts.gstatic.com/" rel="preconnect"/>
<link as="style" href="https://fonts.googleapis.com/css2?display=swap&family=Noto+Sans%3Awght%40400%3B500%3B700%3B900&family=Space+Grotesk%3Awght%40400%3B500%3B700" onload="this.rel='stylesheet'" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet"/>

<title>Stitch Design</title>
<link href="data:image/x-icon;base64," rel="icon" type="image/x-icon"/>

<button class="flex size-10 shrink-0 items-center justify-center">
arrow_back_ios_new
</button>

Settings

1,234,567,890 CP

(+123.4k CP/s)

<a class="flex items


z.1Q("z.X.1J");z.1J=B(bB){if(bB){D.hw(bB)}};z.1J.hp={p0:[0,0,0],oZ:[60,60,60],oY:[2j,2j,2j],oX:[1T,1T,1T],oW:[2j,0,0],oV:[1T,0,0],oU:[2j,0,2j],oT:[1T,0,1T],oS:[0,2j,0],oR:[0,1T,0],oQ:[2j,2j,0],oP:[1T,1T,0],oO:[0,0,2j],oN:[0,0,1T],oM:[0,2j,2j],oL:[0,1T,1T]};z.4M(z.1J,{r:1T,g:1T,b:1T,a:1,bz:B(r,g,b,a){A t=D;t.r=r;t.g=g;t.b=b;t.a=a},hw:B(2Q){A d=z;if(d.1R(2Q)){d.hq(2Q,D)}I{if(d.2l(2Q)){d.7P(2Q,D)}I{D.bz(2Q.r,2Q.g,2Q.b,2Q.a);if(!(2Q 1N d.1J)){D.7Q()}}}C D},7Q:B(){C D},oK:B(){A t=D;C[t.r,t.g,t.b]},oJ:B(){A t=D;C[t.r,t.g,t.b,t.a]},oI:B(){A Q=z.23(["r","g","b"],B(x){A s=D[x].2i(16);C s.G<2?"0"+s:s},D);C"#"+Q.22("")},8F:B(hv){A t=D,7S=t.r+", "+t.g+", "+t.b;C(hv?"hs("+7S+", "+t.a:"7S("+7S)+")"},2i:B(){C D.8F(K)}});z.d8=B(bA,1d,hu,M){A d=z,t=M||S z.1J();d.1n(["r","g","b","a"],B(x){t[x]=bA[x]+(1d[x]-bA[x])*hu;if(x!="a"){t[x]=2Y.oH(t[x])}});C t.7Q()};z.ho=B(ht,M){A m=ht.1M().1f(/^hs?\\(([\\s\\.,0-9]+)\\)/);C m&&z.7P(m[1].1A(/\\s*,\\s*/),M)};z.hn=B(4j,M){A d=z,t=M||S d.1J(),7R=(4j.G==4)?4:8,hr=(1<<7R)-1;4j=2V("oG"+4j.3b(1));if(2L(4j)){C L}d.1n(["b","g","r"],B(x){A c=4j&hr;4j>>=7R;t[x]=7R==4?17*c:c});t.a=1;C t};z.7P=B(a,M){A t=M||S z.1J();t.bz(2V(a[0]),2V(a[1]),2V(a[2]),2V(a[3]));if(2L(t.a)){t.a=1}C t.7Q()};z.hq=B(2H,M){A a=z.1J.hp[2H];C a&&z.7P(a,M)||z.ho(


: defaultPadding / 2),
            const Expanded(
              child: Text(
                _tokenAlertMessage,
                style: TextStyle(
                  color: Colors.white,
                  fontWeight: FontWeight.w600,
                ),
              ),
            ),
            const SizedBox(width: defaultPadding / 2),
            GestureDetector(
              onTap: () => context.read<PATProvider>().markBannerClosed(),
              child: const Icon(Icons.close, color: Colors.white),
            )
          ],
        ),
      ),
    );
  }
}
import 'package:catcher_2/catcher_2.dart';
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';

class Logger {
  static const bool b = false;
  static void log(String? tag, {required String? message}) {
    assert(tag != null);

    if (kReleaseMode == b) {
      final f = DateFormat('HH:mm:S');
      String s = f.format(DateTime.now());
      // ignore: avoid_print
      print("[$tag][$s] $message");
    }
  }

  static void debug(String? tag, {required String? message}) {
    assert(tag != null);
    final f = DateFormat('HH:mm:S');
    String s = f.format(DateTime.now());
    // ignore: avoid_print
    print("[$tag][$s] $message");
  }

  static reportCheckedError(e, s) {
    if (kReleaseMode == b) {
      // ignore: avoid_print
      print("$e $s");
    }
  }

  static sendCatcherError(tag, e, s) {
    final f = DateFormat('HH:mm:S');
    String time = f.format(DateTime.now());
    Catcher2.reportCheckedError('[$tag][$time] $e', s);
    if (kReleaseMode == b) {
      // ignore: avoid_print
      print("[$tag][$time] $e");
    }
  }

  static sendTestException() {
    if (kReleaseMode != b) {
      Catcher2.sendTestException();
    }
  }
}
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mobileqmspro/utils/functions.dart';

class Constant {
  static bool sendTestException = false;
}

const String myBaseUrl = (kReleaseMode == true)
    ? 'https://mobileqms.com/'
    : 'http://localhost:1234/';
const String privacyUrl = 'https://mobileqms.com/privacy.html';
const String termUrl = 'https://mobileqms.com/terms.html';
const String baseMobileQMSProWeb = '${myBaseUrl}pro/';
const String configFile =
    (kReleaseMode == true) ? 'production.yaml' : 'development.yaml';

class Texts {
  static const String appName = "MobileQMSPro";
}

class WidgetProp {
  static const double width = 500;
}

class Prefs {
  static const String language = "lang";
  static const String userProfileKey = "userProfileKey";
  static const String windowName = "windowName";
  static const String windowEmail = "windowEmail";
  static const String windowPhone = "windowPhone";
  static const String ttsLang = "ttsLang";
  static const String ttsVolume = "ttsVolume";
  static const String ttsPitch = "ttsPitch";
  static const String ttsRate = "ttsRate";
  static const String boardBgColor = "boardBgColor";
  static const String boardTextColor = "boardTextColor";
  static const String boardNumBox = "boardNumBox";
  static const String printFontScale = "printFontScale";
  static const String printPageSize = "printPageSize";
  static


group_id: i32,
    pub post_category_id: i32,
    pub content: String,
    pub embedded: bool,
    pub published: bool,
    pub created: DateTime<Utc>,
    pub updated: DateTime<Utc>,
}

impl Post {
    pub fn new() -> Self {
        Self {
            id: -1,
            title: String::from(""),
            label: String::from(""),
            post_category_id: -1,
            post_group_id: -1,
            content: String::from(""),
            embedded: false,
            published: true,
            created: Utc::now(),
            updated: Utc::now(),
        }
    }

    pub fn test() -> Self {
        Self {
            id: 7,
            title: String::from("Test Post"),
            label: String::from(""),
            post_category_id: 0,
            post_group_id: 0,
            content: String::from("
Hello there~
"),
            embedded: true,
            published: true,
            created: Utc::now(),
            updated: Utc::now(),
        }
    }
}

// New Post //
#[derive(Debug, Deserialize, Insertable)]
#[table_name="post"]
pub struct NewPost {
    pub title: String,
    pub label: String,
    pub post_group_id: i32,
    pub post_category_id: i32,
    pub content: String,
    pub embedded: bool,
    pub published: bool,
    pub created: DateTime<Utc>,
    pub updated: DateTime<Utc>,
}

impl NewPost {
    pub fn new() -> Self {
        Self {
            title: String::from(""),
            label: String::from(""),
            post_category_id: -1,
            post_group_id: -1,
            content: String::from(""),
            embedded: false,
            published: true,
            created: Utc::now(),
            updated: Utc::now(),
        }
    }

    pub fn test() -> Self {
        Self {
            title: String::from("Test Post"),
            label: String::from(""),
            post_category_id: 7,
            post_group_id: 7,
            content: String::from("Content"),
            embedded: false,
            published: true,
            created: Utc::now(),
            updated: Utc::now(),
        }
    }
}

// Post Form //
#[derive(Debug, Deserialize, Serialize)]
pub struct PostForm {
    #[serde(deserialize_with = "toolkit::ok_or_none")]
    pub post_id: Option<i32>,
    pub post_title: String,
    pub post_label: String,
    #[serde(deserialize_with = "toolkit::ok_or_none")]
    pub post_group_id:  Option<i32>,
    pub post_group_name: String,
    pub post_category_id: i32,
    pub post_content: String,
    pub post_embedded: bool,
    pub post_published: bool,
}

// Post Request //
#[derive(Debug, Deserialize)]
pub struct PostRequest {
    pub post_id: Option<i32>,
    pub post: Option<Post>
}#![no_std]
#![no_main]

#[macro_use]
extern crate user_lib;

#[no_mangle]
pub fn main() -> i32 {
    println!("Hello world from user mode program!");
    0
}<reponame>alexandruradovici/harbour
use std::io;

mod sh_ast;
mod sh_rules;

use


      js_util.callMethod(wasm, 'default_veilid_config', []);
}
import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart';
import 'dart:ui';
import 'package:google_fonts/google_fonts.dart';
import 'package:myapp/page-1/cara-memandikan-jenazah.dart';
import 'package:myapp/page-1/niat3.dart';
import 'package:myapp/utils.dart';

class Niat2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    double baseWidth = 430;
    double fem = MediaQuery.of(context).size.width / baseWidth;
    double ffem = fem * 0.97;
    return Container(
      width: double.infinity,
      child: Container(
        // niat2p7s (72:73)
        padding: EdgeInsets.fromLTRB(0 * fem, 26 * fem, 0 * fem, 0 * fem),
        width: double.infinity,
        decoration: BoxDecoration(
          color: Color(0xffffffff),
        ),
        child: SingleChildScrollView(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Container(
                // niatjenazah1LM7 (177:121)
                margin:
                    EdgeInsets.fromLTRB(0 * fem, 0 * fem, 0 * fem, 20 * fem),
                width: 430 * fem,
                height: 240 * fem,
                child: Image.asset(
                  'assets/page-1/images/niatjenazah-1-XFP.png',
                  fit: BoxFit.cover,
                ),
              ),
              Container(
                // autogroup4p4mGEm (8WgcSSqMAKVng66v1g4P4M)
                width: double.infinity,
                height: 646 * fem,
                decoration: BoxDecoration(
                  color: Color(0x99cecece),
                ),
                child: Stack(
                  children: [
                    Positioned(
                      // rectangle33Cu7 (347:6)
                      left: 17 * fem,
                      top: 14 * fem,
                      child: Align(
                        child: SizedBox(
                          width: 394 * fem,
                          height: 607 * fem,
                          child: Container(
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(30 * fem),
                              color: Color(0xffffffff),
                            ),
                          ),
                        ),
                      ),
                    ),
                    Positioned(
                      // lafazniatmemandikanjenazahlela (72:77)
                      left: 24 * fem,
                      top: 41 * fem,
                      child: Align(
                        child: SizedBox(
                          width: 379 * fem,
                          height: 383 * fem,
                          child: Text(
                            'Lafaz niat memandikan jenazah lelaki :\n\nنَوَيْتُ الْغُسْلَ اَدَاءً عَنْ هذَاالْمَيِّتِ للهِ تَعَالَى \n\nNawaitul gusla adaa-an \'an haadzal mayyiti lillahi ta\'aalaa. \n\nLafaz niat memandikan jenazah perempuan : \n\nنَوَيْتُ الْغُسْلَ اَدَاءً عَنْ هذِهِ الْمَيِّتَةِ ِللهِ تَعَالَى \n\nNawaitul gusla adaa-an \'an haadzihil mayyitati lillaahi ta\'aalaa. \n\n ',
                            style: SafeGoogleFont(
                              'Poppins',
                              fontSize: 17 * ffem,
                              fontWeight: FontWeight.w400,
                              height: 1.5 * ffem / fem,
                              color: Color(0xff000000),
                            ),
                          ),
                        ),
                      ),
                    ),
                    Positioned(
                      // rectangle43PMK (232:197)
                      left: 112 * fem,
                      top: 523 * fem,
                      child: Align(
                        child: SizedBox(
                          width: 205 * fem,
                          height: 52 * fem,
                          child: Container(
                            deco


55, v255 offset:4 gds
// GFX11: [0x04,0x00,0x82,0xd8,0xff,0xff,0x00,0xff]

ds_add_rtn_u64 v[5:6], v1, v[2:3]
// GFX11: [0x00,0x00,0x80,0xd9,0x01,0x02,0x00,0x05]

ds_add_rtn_u64 v[5:6], v1, v[2:3] offset:65535
// GFX11: [0xff,0xff,0x80,0xd9,0x01,0x02,0x00,0x05]

ds_add_rtn_u64 v[5:6], v1, v[2:3] offset:0
// GFX11: [0x00,0x00,0x80,0xd9,0x01,0x02,0x00,0x05]

ds_add_rtn_u64 v[254:255], v255, v[254:255] offset:4 gds
// GFX11: [0x04,0x00,0x82,0xd9,0xff,0xfe,0x00,0xfe]

ds_add_u32 v1, v2
// GFX11: [0x00,0x00,0x00,0xd8,0x01,0x02,0x00,0x00]

ds_add_u32 v1, v2 offset:65535
// GFX11: [0xff,0xff,0x00,0xd8,0x01,0x02,0x00,0x00]

ds_add_u32 v1, v2 offset:0
// GFX11: [0x00,0x00,0x00,0xd8,0x01,0x02,0x00,0x00]

ds_add_u32 v255, v255 offset:4 gds
// GFX11: [0x04,0x00,0x02,0xd8,0xff,0xff,0x00,0x00]

ds_add_u64 v1, v[2:3]
// GFX11: [0x00,0x00,0x00,0xd9,0x01,0x02,0x00,0x00]

ds_add_u64 v1, v[2:3] offset:65535
// GFX11: [0xff,0xff,0x00,0xd9,0x01,0x02,0x00,0x00]

ds_add_u64 v1, v[2:3] offset:0
// GFX11: [0x00,0x00,0x00,0xd9,0x01,0x02,0x00,0x00]

ds_add_u64 v255, v[254:255] offset:4 gds
// GFX11: [0x04,0x00,0x02,0xd9,0xff,0xfe,0x00,0x00]

ds_and_b32 v1, v2
// GFX11: [0x00,0x00,0x24,0xd8,0x01,0x02,0x00,0x00]

ds_and_b32 v1, v2 offset:65535
// GFX11: [0xff,0xff,0x24,0xd8,0x01,0x02,0x00,0x00]

ds_and_b32 v1, v2 offset:0
// GFX11: [0x00,0x00,0x24,0xd8,0x01,0x02,0x00,0x00]

ds_and_b32 v255, v255 offset:4 gds
// GFX11: [0x04,0x00,0x26,0xd8,0xff,0xff,0x00,0x00]

ds_and_b64 v1, v[2:3]
// GFX11: [0x00,0x00,0x24,0


nfix.en_GB.samples.CharSequenceExpectationSamples.notToBeEmpty
 */
infix fun <T : CharSequence> Expect<T>.notToBe(@Suppress("UNUSED_PARAMETER") empty: empty): Expect<T> =
    _logicAppend { isNotEmpty() }

/**
 * Expects that the subject of `this` expectation (a [CharSequence]) [CharSequence].[kotlin.text.isNotBlank].
 *
 * @param blank Use the pseudo-keyword `blank`.
 *
 * @return an [Expect] for the subject of `this` expectation.
 *
 * @sample ch.tutteli.atrium.api.infix.en_GB.samples.CharSequenceExpectationSamples.notToBeBlank
 */
infix fun <T : CharSequence> Expect<T>.notToBe(@Suppress("UNUSED_PARAMETER") blank: blank): Expect<T> =
    _logicAppend { isNotBlank() }
package ch.tutteli.atrium.api.fluent.en_GB.samples

import ch.tutteli.atrium.api.fluent.en_GB.*
import ch.tutteli.atrium.api.verbs.expect
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.Month
import kotlin.test.Test

class LocalDateFeatureExtractorSamples {

    @Test
    fun yearFeature() {
        expect(LocalDate.of(2021, Month.OCTOBER, 9))
            .year // subject is now of type Int (actually 2021)
            .toEqual(2021)

        fails {
            expect(LocalDate.of(2021, Month.OCTOBER, 9))
                .year // subject is now of type Int (actually 2021)
                .toBeGreaterThan(2030)  // fails
                .toBeLessThan(2000)     // not evaluated/reported because toBeLessThan already fails
            //                             use `.year { ... }` if you want that all expectations are evaluated
        }
    }

    @Test
    fun year() {
        expect(LocalDate.of(2021, Month.OCTOBER, 9))
            .year { // subject inside this expectation-group is of type Int (actually 2021)
                toEqual(2021)
                toBeGreaterThan(2020)
            } // subject here is back to type LocalDate

        fails {
            expect(LocalDate.of(2021, Month.OCTOBER, 9))
                .year { // subject inside this expectation-group is of type Int (actually 2021)
                    notToEqual(1980)    // fails
                    toBeLessThan(2000)  // not evaluated/reported because notToEqual already fails
                    //                     use `.year.` if you want a fail fast behaviour
                }
        }
    }

    @Test
    fun monthFeature() {
        expect(LocalDate.of(2021, Month.OCTOBER, 9))
            .month // subject is now of type Int (actually Month.OCTOBER.value i.e. 10)
            .toEqual(10)

        fails {
            expect(LocalDate.of(2021, Month.OCTOBER, 9))
                .month // subject is now of type Int (actually Month.OCTOBER.value i.e. 10)
                .toBeLessThan(9)     // fails
                .toBeGreaterThan(11) // not evaluated/reported because toBeLessThan already fails
            //                          use `.month { ... }` if you want that all expectations are evaluated
        }
    }

    @Test
    fun month() {
        expect(LocalDate.of(2021, Month.OCTOBER, 9))
            .month { // subject inside this expectation-group is of type Int (actually Month.OCTOBER.value i.e. 10)
                toBeGreaterThan(5)
                notToEqual(9)
            } // subject here is back to type LocalDate

        fails {
            expect(Local


 nameSuffix, worldFrame, registry);
            waypointZUpViz = new YoGraphicVector(nameSuffix + "WaypointZUpViz" + nameSuffix, position, zUpViz, 1.0, YoAppearance.Orange());
            waypointHeadingViz = new YoGraphicVector(namePrefix + "WaypointHeadingViz" + nameSuffix, position, headingViz, 1.0, YoAppearance.Black());
            yoGraphicsList.add(waypointZUpViz);
            yoGraphicsList.add(waypointHeadingViz);
         }
         else
         {
            zUpViz = null;
            headingViz = null;
            waypointZUpViz = null;
            waypointHeadingViz = null;
         }

         clear();
      }

      public void clear()
      {
         time.setToNaN();
         position.setToNaN();
         yaw.setToNaN();
      }

      public void updateViz()
      {
         if (headingViz != null)
         {
            zUpViz.set(Axis3D.Z);
            RotationMatrixTools.applyYawRotation(getYaw(), Axis3D.X, headingViz);
         }
      }

      public double getPosition(Axis3D axis)
      {
         return position.getElement(axis);
      }

      public double getYaw()
      {
         return yaw.getValue();
      }

      public void setYaw(double yaw)
      {
         this.yaw.set(yaw);
      }

      @Override
      public String toString()
      {
         return name + ", time: " + time.getValue() + ", pos: " + EuclidCoreIOTools.getTuple3DString(position) + ", yaw: " + yaw.getValue();
      }
   }

   private static class TrajectoryManager
   {
      private final DMatrixRMaj[] linearSolutions = {new DMatrixRMaj(1, 1), new DMatrixRMaj(1, 1), new DMatrixRMaj(1, 1)};
      private final DMatrixRMaj yawSolution = new DMatrixRMaj(1, 1);
      private final YoMatrix someMatrix;
      private final MultiCubicSpline1DSolver[] linearSolvers = {new MultiCubicSpline1DSolver(), new MultiCubicSpline1DSolver(), new MultiCubicSpline1DSolver()};
      private final MultiCubicSpline1DSolver yawSolver = new MultiCubicSpline1DSolver();
      private double totalDuration;

      public TrajectoryManager(YoRegistry registry)
      {
         someMatrix = new YoMatrix("SolutionX", 8, 1, registry);
      }

      public void initialize(Vector3DReadOnly initialLinearVelocity,
                             double initialYawRate,
                             YoPreallocatedList<WaypointData> waypoints,
                             boolean isLastWaypointOpen)
      {
         WaypointData firstWaypoint = waypoints.getFirst();
         WaypointData lastWaypoint = waypoints.getLast();
         totalDuration = lastWaypoint.time.getValue();

         for (Axis3D axis : Axis3D.values)
         {
            MultiCubicSpline1DSolver linearSolver = linearSolvers[axis.ordinal()];
            linearSolver.clearWaypoints();
            linearSolver.clearWeights();
            linearSolver.setEndpoints(firstWaypoint.getPosition(axis),
                                      initialLinearVelocity.getElement(axis) * totalDuration,
                                      lastWaypoint.getPosition(axis),
                                      0.0);
            if (isLastWaypointOpen)
               linearSolver.setEndpointWeights(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 0.0);

            for (int i = 1; i < waypoints.size() - 1; i++)
            {
               WaypointData waypoint = waypoints.get(i);
               linearSolver.addWaypoint(waypoint.getPosition(axis), waypoint.time.


</th>
        <th> HttpMethods </th>
        <th> Template </th>
    </tr>
    STD_ROUTE_CONTENT
</table>
</body>
</html>";

    internal class EndpointRouteInfo
    {
        public string DisplayName { get; set; }

        public IReadOnlyList<string> HttpMethods { get; set; }

        public string Pattern { get; set; }

        public bool IsODataRoute { get; set; }

        public bool IsConventional { get; set; }
    }
}


 should
    // handle it gracefully.
    if (uriOrPath.contains('\\')) return path.windows.toUri(uriOrPath);
    return Uri.parse(uriOrPath);
  }

  /// Runs [body] and returns its result.
  ///
  /// If [body] throws a [FormatException], returns an [UnparsedFrame] with
  /// [text] instead.
  static Frame _catchFormatException(String text, Frame Function() body) {
    try {
      return body();
    } on FormatException catch (_) {
      return UnparsedFrame(text);
    }
  }

  Frame(this.uri, this.line, this.column, this.member);

  @override
  String toString() => '$location in $member';
}
// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:pool/pool.dart';

void main(List<String> args) async {
  var poolSize = args.isEmpty ? 5 : int.parse(args.first);
  print('Pool size: $poolSize');

  final pool = Pool(poolSize);
  final watch = Stopwatch()..start();
  final start = DateTime.now();

  DateTime? lastLog;
  Duration? fastest;
  late int fastestIteration;
  var i = 1;

  void log(bool force) {
    var now = DateTime.now();
    if (force ||
        lastLog == null ||
        now.difference(lastLog!) > const Duration(seconds: 1)) {
      lastLog = now;
      print([
        now.difference(start),
        i.toString().padLeft(10),
        fastestIteration.toString().padLeft(7),
        fastest!.inMicroseconds.toString().padLeft(9)
      ].join('   '));
    }
  }

  print(['Elapsed       ', 'Iterations', 'Fastest', 'Time (us)'].join('   '));

  for (;; i++) {
    watch.reset();

    var sum = await pool
        .forEach<int, int>(Iterable<int>.generate(100000), (i) => i)
        .reduce((a, b) => a + b);

    assert(sum == 4999950000, 'was $sum');

    var elapsed = watch.elapsed;
    if (fastest == null || fastest > elapsed) {
      fastest = elapsed;
      fastestIteration = i;
      log(true);
    } else {
      log(false);
    }
  }
}
// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';
import 'dart:collection';
import 'dart:io';

import 'package:bazel_worker/bazel_worker.dart';
import 'package:bazel_worker/driver.dart';
import 'package:test/test.dart';

void main() {
  BazelWorkerDriver? driver;
  final disconnectedResponse = WorkResponse(
    exitCode: EXIT_CODE_BROKEN_PIPE,
    output: 'Connection closed',
  )..freeze();

  group('basic driver', () {
    test('can run a single request', () async {
      await _doRequests(count: 1);
      await _doRequests(count: 1);
    });

    test(
      'can run multiple batches of requests through multiple workers',
      () async {
        var maxWorkers = 4;
        var maxIdleWorkers = 2;
        driver = BazelWorkerDriver(
          MockWorker.spawn,
          maxWorkers: maxWorkers,
          maxIdleWorkers: maxIdleWorkers,
        );
        for (var i = 0; i < 10; i++) {
          await _doRequests(driver: driver);
          expect(MockWorker.liveWorkers.length, maxIdleWorkers);
          // No workers should be killed while there is ongoing work, but they
          // should be cleaned up once there isn't any more work to do.
          expect(
            MockWorker.deadWorkers.length,


om/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_visibleMapRect_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "visibleMapRect": visibleMapRect[__i__]}]);

  }

  Future<void> set_limitRegion_batch(List<MACoordinateRegion> limitRegion, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_limitRegion_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "limitRegion": limitRegion[__i__]}]);

  }

  Future<void> set_limitMapRect_batch(List<MAMapRect> limitMapRect, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_limitMapRect_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "limitMapRect": limitMapRect[__i__]}]);

  }

  Future<void> set_zoomLevel_batch(List<double> zoomLevel, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_zoomLevel_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "zoomLevel": zoomLevel[__i__]}]);

  }

  Future<void> set_minZoomLevel_batch(List<double> minZoomLevel, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_minZoomLevel_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "minZoomLevel": minZoomLevel[__i__]}]);

  }

  Future<void> set_maxZoomLevel_batch(List<double> maxZoomLevel, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec())).invokeMethod('MAMapView::set_maxZoomLevel_batch', [for (int __i__ = 0; __i__ < length; __i__++) {'__this__': this[__i__], "maxZoomLevel": maxZoomLevel[__i__]}]);

  }

  Future<void> set_rotationDegree_batch(List<double> rotationDegree, {bool viewChannel = true}) async {
    await MethodChannel(viewChannel ? 'me.yohom/amap_map_fluttify/MAMapView' : 'me.yohom/amap_map_fluttify', StandardMethodCodec(FluttifyMessageCodec()))


 outside the view should not be accessed.
  Uint8List get bytes => Uint8List.view(_buffer.buffer, 0, _buffer.length);

  final _buffer = Uint8Buffer();

  /// Whether [close] has been called.
  bool get isClosed => _isClosed;
  var _isClosed = false;

  /// Removes all bytes from [bytes].
  ///
  /// This can be used to avoid double-processing data.
  void clear() {
    _buffer.clear();
  }

  @override
  void add(List<int> chunk) {
    if (_isClosed) {
      throw StateError("Can't add to a closed sink.");
    }

    _buffer.addAll(chunk);
  }

  @override
  void addSlice(List<int> chunk, int start, int end, bool isLast) {
    if (_isClosed) {
      throw StateError("Can't add to a closed sink.");
    }

    _buffer.addAll(chunk, start, end);
    if (isLast) _isClosed = true;
  }

  @override
  void close() {
    _isClosed = true;
  }
}
// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:convert';

import '../charcodes.dart';

/// The canonical instance of [PercentEncoder].
const percentEncoder = PercentEncoder._();

/// A converter that encodes byte arrays into percent-encoded strings.
///
/// Encodes all bytes other than ASCII letters, decimal digits, or one
/// of `-._~`. This matches the behavior of [Uri.encodeQueryComponent] except
/// that it doesn't encode `0x20` bytes to the `+` character.
///
/// This will throw a [RangeError] if the byte array has any digits that don't
/// fit in the gamut of a byte.
class PercentEncoder extends Converter<List<int>, String> {
  const PercentEncoder._();

  @override
  String convert(List<int> input) => _convert(input, 0, input.length);

  @override
  ByteConversionSink startChunkedConversion(Sink<String> sink) =>
      _PercentEncoderSink(sink);
}

/// A conversion sink for chunked percentadecimal encoding.
class _PercentEncoderSink extends ByteConversionSinkBase {
  /// The underlying sink to which decoded byte arrays will be passed.
  final Sink<String> _sink;

  _PercentEncoderSink(this._sink);

  @override
  void add(List<int> chunk) {
    _sink.add(_convert(chunk, 0, chunk.length));
  }

  @override
  void addSlice(List<int> chunk, int start, int end, bool isLast) {
    RangeError.checkValidRange(start, end, chunk.length);
    _sink.add(_convert(chunk, start, end));
    if (isLast) _sink.close();
  }

  @override
  void close() {
    _sink.close();
  }
}

String _convert(List<int> bytes, int start, int end) {
  var buffer = StringBuffer();

  // A bitwise OR of all bytes in [bytes]. This allows us to check for
  // out-of-range bytes without adding more branches than necessary to the
  // core loop.
  var byteOr = 0;
  for (var i = start; i < end; i++) {
    var byte = bytes[i];
    byteOr |= byte;

    // If the byte is an uppercase letter, convert it to lowercase to check if
    // it's unreserved. This works because uppercase letters in ASCII are
    // exactly `0b100000 = 0x20` less than lowercase letters, so if we ensure
    // that that bit is 1 we ensure that the letter is lowercase.
    var letter = 0x20 | byte;
    if ((letter >= $a && letter <= $z) ||
        (byte >= $0 && byte <=


ive ways physically disabled people enter information:

粘滞键

Make entering key combinations easy. For example to make a capital letter, first press the shift key, release it, then press the letter to be capitalized. The sticky key technique is utilized by people who have only one usable hand, or who have no use of their hands and type using a stick in their mouth.

Single switch

Technologies enable persons with severe physical disabilities. Some, like Stephen Hawking, enter information by choosing among lists of options. They might press a switch down to begin moving a highlight bar through the list, and release the switch when the desired option is highlighted.

特种键盘

Exist to make data entry easier. However, any special features are generally handled in the keyboard itself, so that no special programming is required.

语音识别

Technology lets people talk to the computer. This technology has come a long way, but still needs to be more integrated into mainstream software.

Consistent keyboard support and hotkeys

Many people can't use a mouse. Extremely consistent keystroke support is a very important consideration. Blind testers have knack for finding ways to improve keystroke support in almost any given piece of software. Testing with people that have disabilities generally benefits everyone. Use the accessible toolkit checklist to make sure your UI controls adhere to standards.

一大主要限制——上下文缺失

这些无障碍软件厂商开发的解决方案大大增加了几十万残障人士的就业率和幸福指数，这些工作的重要性绝不能被轻视。然而，这些解决方案都没能为残障人士提供一个完全可访问、高度易用的工作环境。这是由于一个和上下文有关的简单问题——用户与计算机间的交互是由交互的上下文决定的。当用户在键盘上输入一些东西，或者一个应用程序在屏幕上显示了一些文本或图像，在不同的上下文中，这些交互行为的具体含义也可以是截然不同的。举个例子，一个应用程序可能在处理任务时显示一个电灯泡，而另一个程序可能是在完成任务后显示电灯泡。如果盲人不能得知显示是哪个程序显示了电灯泡，就无法理解这个电灯泡代表什么意思，只能靠猜。类似地，语音识别软件常常需要用户补充交互的上下文信息，来保证用户的语音输入作用到正确的上下文中。这个上下文的问题依然困扰着现代的辅助功能解决方案。

The most recent noteable attempt at solving this problem was put forth by Microsoft in 1997, and is called <dfn>Microsoft Active Accessibility (MSAA)</dfn>. Realizing that complete accessibility was not possible without cooperation between applications and accessibility aids such as screen reading software or voice recognition software, Microsoft Active Accessibility defines a Windows-based standard by which applications can communicate context and other pertanent information to accessibility aids. This solution has seen only partial success, largely due to the fact that it requires significant changes to applications which are made accessible. Because most popular desktop and productivity applications are not open source, this forced disabled people to rely on the companies which produce this software to make it accessible. These companies were often reluctant for various reasons including the large amount of time required to do so. On a positive note, recent federal purchasing rules such as Section 508 have caused many companies to pay attention and implement MSAA support.

步入开源软件之门

Microsoft was on the right track with Microsoft Active Accessibility, but because the source code to most popular desktop applications which


0OWVhYTExNWYyNjhmNzlkMmUwNl8xOTMvZnJhZzo2ODZhOTFhZWU5YzA0NmI4OTk0NDU5NTljM2VjNTdmMy90YWJsZTo3MmZlMjllMDUxYTE0NmVhOWE5NDFmMDYyZTVlOWVlMS90YWJsZXJhbmdlOjcyZmUyOWUwNTFhMTQ2ZWE5YTk0MWYwNjJlNWU5ZWUxXzEtMi0xLTEtMTI5MjQ5_bb4dde0e-36f7-4b52-bcf1-5589b582309b">204</ix:nonFraction>

Goodwill		<ix:nonFraction unitRef="usd" contextRef="if45fc10d6bc640768bb0b12c06895889_I20200706" decimals="-6" name="us-gaap:Goodwill" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjQxZjNhNDg3MTQwMTQ5ZWFhMTE1ZjI2OGY3OWQyZTA2L3NlYzo0MWYzYTQ4NzE0MDE0OWVhYTExNWYyNjhmNzlkMmUwNl8xOTMvZnJhZzo2ODZhOTFhZWU5YzA0NmI4OTk0NDU5NTljM2VjNTdmMy90YWJsZTo3MmZlMjllMDUxYTE0NmVhOWE5NDFmMDYyZTVlOWVlMS90YWJsZXJhbmdlOjcyZmUyOWUwNTFhMTQ2ZWE5YTk0MWYwNjJlNWU5ZWUxXzItMi0xLTEtMTI5MjQ5_9ae8a2ae-8ca5-47ce-83d1-013007e4a034">384</ix:nonFraction>

Intangible assets		<span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt


 self, req: ServiceRequest) -> Self::Future {
        let mut srv = self.service.clone();

        Box::pin(async move {
            let session = req.get_session();
            let dbs = req
                .app_data::<web::Data<Databases>>()
                .expect("Can't get db pool from auth middleware")
                .get_ref();

            if let Ok(None) = session.get::<String>("id") {
                let id = nanoid!();
                let _ = session.set("id", id);
            }

            let token = authenticate(&req.path(), &session, &dbs.app).await;

            if let Some(a) = token {
                req.head().extensions_mut().insert(a);
                let fut = srv.call(req);
                Ok(fut.await?)
            } else {
                Err(ErrorUnauthorized("unauthorized"))
            }
        })
    }
}

const NO_AUTH_PATHS: [&str; 3] = [
    "/auth",
    "/robots.txt",
    "/share.html"
];

async fn authenticate(path: &str, session: &Session, pool: &SqlitePool) -> Option<Token> {
    if NO_AUTH_PATHS.contains(&path) {
        return Some(Token::anonymous());
    }
    authenticate_user(session, pool).await
}

async fn authenticate_user(session: &Session, pool: &SqlitePool) -> Option<Token> {
    let session_token = session.get::<String>("token");
    let session_id = session.get::<String>("id");

    if let Ok(Some(token)) = session_token {
        if let Ok(Some(id)) = session_id {
            return find_valid_token(pool, &id, &token, false).await;
        }
        return None;
    }
    None
}

#[get("/auth")]
pub async fn auth(session: Session, req: HttpRequest) -> AWResult<HttpResponse> {
    let token = req.query_string();

    if token != "" {
        let _ = session.set("token", token);
    }

    Ok(HttpResponse::Found()
        .set_header(header::LOCATION, "/")
        .finish())
}
// Copyright 2021 Cargill Incorporated
//
// 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.

mod models;
mod operations;
mod schema;

use std::sync::{Arc, RwLock};

use diesel::r2d2::{ConnectionManager, Pool};

use crate::store::pool::ConnectionPool;

use super::{CommitHashStore, CommitHashStoreError};

use operations::get_current_commit_hash::CommitHashStoreGetCurrentCommitHashOperation as _;
use operations::set_current_commit_hash::CommitHashStoreSetCurrentCommitHashOperation as _;
use operations::CommitHashStoreOperations;

/// Database backed [CommitHashStore] implementation.
#[derive(Clone)]
pub struct DieselCommitHashStore<Conn: diesel::Connection + 'static> {
    pool: ConnectionPool<Conn>,
    circuit_id: Arc<str>,
    service_id: Arc<str>,
}

impl<C: diesel::Connection> DieselCommitHashStore<C> {
    /// Constructs new DieselCommitHashStore.
    ///
    /// # Arguments
    ///
    /// * `pool` - Database connection pool
    /// * `circuit_id` - The circuit associated with the store
    /// * `ser


import cos_module_np
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * np.pi, 0.1)
y = cos_module_np.cos_func_np(x)
plt.plot(x, y)
plt.show()

# Below are more specific tests for less common usage
# ---------------------------------------------------

# The function is OK with `x` not having any elements:
x_empty = np.array([], dtype=np.float64)
y_empty = cos_module_np.cos_func_np(x_empty)
assert np.array_equal(y_empty, np.array([], dtype=np.float64))

# The function can handle arbitrary dimensions and non-contiguous data.
# `x_2d` contains the same values, but has a different shape.
# Note: `x_2d.flags` shows it is not contiguous and `x2.ravel() == x`
x_2d = x.repeat(2)[::2].reshape(-1, 3)
y_2d = cos_module_np.cos_func_np(x_2d)
# When reshaped back, the same result is given:
assert np.array_equal(y_2d.ravel(), y)

# The function handles incorrect byte-order fine:
x_not_native_byteorder = x.astype(x.dtype.newbyteorder())
y_not_native_byteorder = cos_module_np.cos_func_np(x_not_native_byteorder)
assert np.array_equal(y_not_native_byteorder, y)

# The function fails if the data type is incorrect:
x_incorrect_dtype = x.astype(np.float32)
try:
    cos_module_np.cos_func_np(x_incorrect_dtype)
    assert 0, "This cannot be reached."
except TypeError:
    # A TypeError will be raised, this can be changed by changing the
    # casting rule.
    pass


ummy();
  expect(2, d);
  var e = inst.field +
      inst.getter +
      (inst.setter = 1) +
      inst.foo(1) +
      await dummy();
  expect(5, e);
}

others() async {
  var a = "${globalVariable} ${await dummy()} " + await "someString";
  expect("1 1 someString", a);
  var c = new C();
  var d = c.field + await dummy();
  var cnt = 2;
  var b = [1, 2, 3];
  b[cnt] = await dummy();
  expect(1, b[cnt]);
  var e = b[0] + await dummy();
  expect(2, e);
}

conditionals() async {
  var a = false;
  var b = true;
  var c = (a || b) || await dummy();
  expect(true, c);
  var d = (a || b) ? a : await dummy();
  expect(false, d);
  var e = (a is int) ? await dummy() : 2;
  expect(2, e);
  try {
    var f = (a is int) ? await dummy() : 2;
  } catch (e) {}
}

asserts() async {
  for (final FutureOr<T> Function<T>(T) func in [id, future]) {
    assert(await func(true));
    assert(id(true), await func("message"));
    assert(await func(true), await (func("message")));
    try {
      assert(await func(false), await (func("message")));
      if (assertStatementsEnabled) throw "Didn't throw";
    } on AssertionError catch (e) {
      expect("message", e.message);
    }
  }
}

controlFlow() async {
  for (final FutureOr<T> Function<T>(T) func in [id, future]) {
    // For.
    var c = 0;
    for (var i = await (func(0)); await func(i < 5); await func(i++)) {
      c++;
    }
    expect(5, c);
    // While.
    c = 0;
    while (await func(c < 5)) c++;
    expect(5, c);
    // Do-while.
    c = 0;
    do {
      c++;
    } while (await func(c < 5));
    expect(5, c);
    // If.
    if (await func(c == 5)) {
      expect(5, c);
    } else {
      throw "unreachable";
    }
    // Throw.
    try {
      throw await func("string");
    } on String {
      // OK.
    }

    try {
      await (throw "string");
    } on String {
      // OK.
    }
    // Try/catch/finally
    try {
      try {
        throw "string";
      } catch (e) {
        expect("string", e);
        expect(0, await func(0));
        rethrow;
      } finally {
        expect(0, await func(0));
      }
    } catch (e) {
      expect(0, await func(0));
      expect("string", e);
    } finally {
      expect(0, await func(0));
    }
    // Switch
    switch (await func(2)) {
      case 2:
        break;
      default:
        throw "unreachable";
    }
    // Return.
    expect(
        42,
        await () async {
          return await func(42);
        }());
    expect(
        42,
        await () async {
          return func(42);
        }());
    // Yield.
    Stream<int> testStream1() async* {
      yield await func(42);
    }

    expectList([42], await testStream1().toList());
    // Yield*
    Stream<int> testStream2() async* {
      yield* await func(intStream());
    }

    expectList([


DenseMatrix m1(rows, cols);
    m1.setZero();
    SparseMatrixType m2(rows, cols);
    // generate random inner indices with no repeats
    Vector<Index, Dynamic> innerIndices(inner);
    innerIndices.setLinSpaced(inner, 0, inner - 1);
    std::random_device rd;
    std::mt19937 g(rd());
    for (Index j = 0; j < outer; j++) {
      std::shuffle(innerIndices.begin(), innerIndices.end(), g);
      Index nzj = internal::random<Index>(2, inner / 2);
      for (Index k = 0; k < nzj; k++) {
        Index i = innerIndices[k];
        Scalar val = internal::random<Scalar>();
        m1.coeffRefByOuterInner(StorageOrdersMatch ? j : i, StorageOrdersMatch ? i : j) = val;
        m2.insertByOuterInner(j, i) = val;
      }
    }

    VERIFY_IS_APPROX(m2, m1);
    // sort wrt greater
    m2.template sortInnerIndices<std::greater<>>();
    // verify that all inner vectors are not sorted wrt less
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::less<>>(), 0);
    // verify that all inner vectors are sorted wrt greater
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::greater<>>(), m2.outerSize());
    // verify that sort does not change evaluation
    VERIFY_IS_APPROX(m2, m1);
    // sort wrt less
    m2.template sortInnerIndices<std::less<>>();
    // verify that all inner vectors are sorted wrt less
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::less<>>(), m2.outerSize());
    // verify that all inner vectors are not sorted wrt greater
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::greater<>>(), 0);
    // verify that sort does not change evaluation
    VERIFY_IS_APPROX(m2, m1);

    m2.makeCompressed();
    // sort wrt greater
    m2.template sortInnerIndices<std::greater<>>();
    // verify that all inner vectors are not sorted wrt less
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::less<>>(), 0);
    // verify that all inner vectors are sorted wrt greater
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::greater<>>(), m2.outerSize());
    // verify that sort does not change evaluation
    VERIFY_IS_APPROX(m2, m1);
    // sort wrt less
    m2.template sortInnerIndices<std::less<>>();
    // verify that all inner vectors are sorted wrt less
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::less<>>(), m2.outerSize());
    // verify that all inner vectors are not sorted wrt greater
    VERIFY_IS_EQUAL(m2.template innerIndicesAreSorted<std::greater<>>(), 0);
    // verify that sort does not change evaluation
    VERIFY_IS_APPROX(m2, m1);
  }

  // test basic computations
  {
    DenseMatrix refM1 = DenseMatrix::Zero(rows, cols);
    DenseMatrix refM2 = DenseMatrix::Zero(rows, cols);
    DenseMatrix refM3 = DenseMatrix::Zero(rows, cols);
    DenseMatrix refM4 = DenseMatrix::Zero(rows, cols);
    SparseMatrixType m1(rows, cols);
    SparseMatrixType m2(rows, cols);
    SparseMatrixType m3(rows, cols);
    SparseMatrixType m4(rows, cols);


mockWatcherMetricsRegistry) EnableMetric(metric telemetry.AvailableMetric) error {
	m.enableMetricCalls = append(m.enableMetricCalls, metric)
	return nil
}

func (m *mockWatcherMetricsRegistry) EmitMetric(metric telemetry.MetricRecording) error {
	m.mu.Lock()
	defer m.mu.Unlock()
	m.emitMetricCalls = append(m.emitMetricCalls, metric)
	return nil
}

func (m *mockWatcherMetricsRegistry) IsMetricEnabled(metric telemetry.AvailableMetric) bool {
	return true
}

func (m *mockProcessHandle) Wait() (*os.ProcessState, error) {
	<-m.done
	// NOTE: Careful when using this object: no way to initialize an os.ProcessState
	// so the content of the object should not be relied on.
	state := os.ProcessState{}
	return &state, nil
}

func (m *mockProcessHandle) MemoryInfo() (*process.MemoryInfoStat, error) {
	return &process.MemoryInfoStat{
		RSS: 1000,
	}, nil
}

func (m *mockProcessHandle) kill() {
	close(m.done)
}

func (m *mockProcessHandle) ExitCode() int {
	return 0
}

func TestNewServerWatcher(t *testing.T) {
	logger := logrus.New()
	logger.SetOutput(io.Discard)
	t.Run("no configured metrics", func(t *testing.T) {
		t.Parallel()
		metricsRegistry := mockWatcherMetricsRegistry{}
		cfg := config.LspwatchConfig{}
		_, err := NewServerWatcher(&metricsRegistry, &cfg, logger)
		if err != nil {
			t.Fatalf("expected no errors creating server watcher, got '%v'", err)
		}

		if len(metricsRegistry.enableMetricCalls) != 1 {
			t.Fatalf("expected 1 EnableMetric call, got %d", len(metricsRegistry.enableMetricCalls))
		}

		if metricsRegistry.enableMetricCalls[0] != telemetry.ServerRSS {
			t.Fatalf("expected EnableMetric to be called with %s, got %s", telemetry.ServerRSS, metricsRegistry.enableMetricCalls[0])
		}
	})

	t.Run("explicitly no metrics enabled in config", func(t *testing.T) {
		t.Parallel()
		metricsRegistry := mockWatcherMetricsRegistry{}
		cfg := config.LspwatchConfig{
			Metrics: &[]string{},
		}
		_, err := NewServerWatcher(&metricsRegistry, &cfg, logger)
		if err != nil {
			t.Fatalf("expected no errors creating server watcher, got '%v'", err)
		}

		if len(metricsRegistry.enableMetricCalls) != 0 {
			t.Fatalf("expected 0 EnableMetric calls, got %d", len(metricsRegistry.enableMetricCalls))
		}
	})

	t.Run("with configured metrics", func(t *testing.T) {
		t.Parallel()
		metricName := "some.metric"
		metricsRegistry := mockWatcherMetricsRegistry{}
		cfg := config.LspwatchConfig{
			Metrics: &[]string{metricName},
		}
		_, err := NewServerWatcher(&metricsRegistry, &cfg, logger)
		if err != nil {
			t.Fatalf("expected no errors creating server watcher, got '%v'", err)
		}

		if len(metricsRegistry.enableMetricCalls) != 1 {
			t.Fatalf("expected 1 EnableMetric call, got %d", len(metricsRegistry.enableMetricCalls))
		}

		if metricsRegistry.enableMetricCalls[0] != telemetry.AvailableMetric(metricName) {
			t.Fatalf("expected EnableMetric to be called with %s, got %s", metricName, metricsRegistry.enableMetricCalls[0])
		}
	})
}

func TestServerWatcher(t *testing.T) {
	logger := logrus.New()
	logge


 na $playstoreLink, $fdroidLink ali pa neposredno prenesete $apkLink. Za naprave iOS je na voljo na $appstoreLink. V $telegram lahko prejemate tudi mobilna obvestila! $thisGuide vas bo popeljal skozi postopek aktivacije obvestil Telegram (je enostavno). Naš bot vam bo nato poslal obvestila o vaših $appName dogodkih.';
  }

  @override
  String get faq250Sbanswer8722Sb308722Sbthis8722Sbguide => 'Ta vodnik';

  @override
  String get faq250Sbanswer8722Sb32 => 'Prioriteta transakcije je nastavitev, ki se pri Monero uporablja za razlikovanje vašega plačila od drugih plačil v Monero omrežju (če obstaja konkurenca). Izvedba transakcij z nizko prioriteto lahko traja dlje časa.';

  @override
  String get faq250Sbanswer8722Sb32250Sb1 => 'Pri Bitcoinu raven provizije vpliva na hitrost potrjevanja vaše transakcije, tako, da rudarji dajo prednost vaši transakciji za višjo provizijo. Ocenjuje se, da bo transakcija z visoko provizijo potrjena v nekaj blokih; Transakcija s srednjo provizijo bo potrjena v roku enega dneva; Transakcija z nizko provizijo bo predvidoma potrjena roku enega tedna.';

  @override
  String faq250Sbanswer8722Sb33(Object appName) {
    return 'Kovance lahko dvignete iz denarnice $appName v svojo osebno denarnico kriptovalute, ki se razlikuje od valute $appName. Če to želite, morate najprej potrditi polje \"Želim prejeti drugo valuto\". Nato izberite želeno prejeto kriptovaluto in vnesite naslov, na katerega želite poslati kovance. Nato izberite, ali želite znesek zagotoviti v kovancih, poslanih iz vaše denarnice, ali v pretvorjenih kovancih, prejetih v ciljno denarnico, ter vnesite količino. Pritisnite \"Nadaljuj\" in prikazale se vam bodo ponudbe, ki ustrezajo vašim zahtevam. Če je seznam prazen, poskusite prilagoditi znesek. Za vsako ponudbo bo prikazana stopnja konverzije in če je sprejemljiva, pritisnite \"Trgovanje\", se strinjati s pogoji in za vas bo samodejno ustvarjeno trgovanje za ustrezni znesek. Ciljni naslov bo samodejno posredovan kupcu preko trgovalnega klepeta. Ostalo se obravnava enako kot vsako drugo trgovanje na $appName - kupec bo želeno valuto poslal na naslov, ki ste ga navedli, in ko prejmete kovance, morate zaključiti trgovanje. To je to!';
  }

  @override
  String get faq250Sbanswer8722Sb338722Sbmorphtoken8722Sbfaq8722Sblink => 'Tukaj lahko preberete več o delovanju ChangeNow, njihovih storitvah in omrežninah';

  @override
  String faq250Sbanswer8722Sb4(Object value) {
    return 'Če imate rezervno kodo, uporabite storitev generiranja QR, kot je $va


sizes: 'col-12',
                            child: Text(
                              '* indica que o campo é obrigatório',
                              style: Theme.of(context).textTheme.bodySmall,
                            ),
                          ),
                        ],
                      ),
                      const Divider(
                        color: Colors.white,
                      ),
                    ],
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

  Future<void> _salvar() async {
    final FormState form = _formKey.currentState!;
    if (!form.validate()) {
      _autoValidate = AutovalidateMode.always;
      showInSnackBar(Constantes.mensagemCorrijaErrosFormSalvar, context);
    } else {
      gerarDialogBoxConfirmacao(context, Constantes.perguntaSalvarAlteracoes, () async {
        form.save();
        if (widget.operacao == 'A') {
          Sessao.db.clienteDao.alterar(cliente!);
        } else {
          Sessao.db.clienteDao.inserir(cliente!);
        }
        Navigator.of(context).pop();
      });
    }
  }

  bool _avisarUsuarioFormAlterado() {
    final FormState? form = _formKey.currentState;
    if (form == null || !_formFoiAlterado) {
      return true;
    } else {
      (gerarDialogBoxFormAlterado(context));
      return false;
    }
  }

  void _excluir() {
    gerarDialogBoxExclusao(context, () async {
      await Sessao.db.clienteDao.excluir(widget.cliente!);
      if (!mounted) return;
      Navigator.of(context).pop();
    });
  }
}
/*
Title: T2Ti ERP 3.0
Description: PersistePage relacionada à tabela [PRODUTO_TIPO]

The MIT License

Copyright: Copyright (C) 2021 T2Ti.COM

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

       The author may be contacted at:
           t2ti.com


--olive-a11: #020a00a0;--olive-a12: #010600e3;--sand-1: #fdfdfc;--sand-2: #f9f9f8;--sand-3: #f1f0ef;--sand-4: #e9e8e6;--sand-5: #e2e1de;--sand-6: #dad9d6;--sand-7: #cfceca;--sand-8: #bcbbb5;--sand-9: #8d8d86;--sand-10: #82827c;--sand-11: #63635e;--sand-12: #21201c;--sand-a1: #55550003;--sand-a2: #25250007;--sand-a3: #20100010;--sand-a4: #1f150019;--sand-a5: #1f180021;--sand-a6: #19130029;--sand-a7: #19140035;--sand-a8: #1915014a;--sand-a9: #0f0f0079;--sand-a10: #0c0c0083;--sand-a11: #080800a1;--sand-a12: #060500e3;--gray-surface: #ffffffcc;--mauve-surface: #ffffffcc;--slate-surface: #ffffffcc;--sage-surface: #ffffffcc;--olive-surface: #ffffffcc;--sand-surface: #ffffffcc;--tomato-surface: #fff6f5cc;--red-surface: #fff5f5cc;--ruby-surface: #fff5f6cc;--crimson-surface: #fef5f8cc;--pink-surface: #fef5facc;--plum-surface: #fdf5fdcc;--purple-surface: #faf5fecc;--violet-surface: #f9f6ffcc;--iris-surface: #f6f6ffcc;--indigo-surface: #f5f8ffcc;--blue-surface: #f1f9ffcc;--cyan-surface: #eff9facc;--teal-surface: #f0faf8cc;--jade-surface: #f1faf5cc;--green-surface: #f1faf4cc;--grass-surface: #f3faf3cc;--brown-surface: #fbf8f4cc;--bronze-surface: #fdf5f3cc;--gold-surface: #f9f8efcc;--sky-surface: #eef9fdcc;--mint-surface: #effaf8cc;--lime-surface: #f6f9f0cc;--yellow-surface: #fefbe4cc;--amber-surface: #fefae4cc;--orange-surface: #fff5e9cc}@supports (color: color(display-p3 1 1 1)){@media (color-gamut: p3){:root,.light,.light-theme{--tomato-1: color(display-p3 .998 .989 .988);--tomato-2: color(display-p3 .994 .974 .969);--tomato-3: color(display-p3 .985 .924 .909);--tomato-4: color(display-p3 .996 .868 .835);--tomato-5: color(display-p3 .98 .812 .77);--tomato-6: color(display-p3 .953 .75 .698);--tomato-7: color(display-p3 .917 .673 .611);--tomato-8: color(display-p3 .875 .575 .502);--tomato-9: color(display-p3 .


Ext::DedicatedAllocation) &&
                                  HasDep(DeviceExt::QueueFamilyForeign);
                break;

            case DeviceExt::ExternalMemoryFD:
            case DeviceExt::ExternalMemoryZirconHandle:
            case DeviceExt::ExternalMemoryHost:
            case DeviceExt::QueueFamilyForeign:
                hasDependencies = HasDep(DeviceExt::ExternalMemory);
                break;

            case DeviceExt::ExternalMemoryDmaBuf:
                hasDependencies = HasDep(DeviceExt::ExternalMemoryFD);
                break;

            case DeviceExt::ExternalSemaphoreFD:
            case DeviceExt::ExternalSemaphoreZirconHandle:
                hasDependencies = HasDep(DeviceExt::ExternalSemaphore);
                break;

            case DeviceExt::_16BitStorage:
                hasDependencies = HasDep(DeviceExt::GetPhysicalDeviceProperties2) &&
                                  HasDep(DeviceExt::StorageBufferStorageClass);
                break;

            case DeviceExt::DisplayTiming:
                hasDependencies = HasDep(DeviceExt::Swapchain);
                break;

            case DeviceExt::CooperativeMatrix:
                hasDependencies = HasDep(DeviceExt::GetPhysicalDeviceProperties2);
                break;

            case DeviceExt::EnumCount:
                DAWN_UNREACHABLE();
        }

        trimmedSet.set(ext, hasDependencies && advertisedExts[ext]);
        visitedSet.set(ext, true);
    }

    return trimmedSet;
}

void MarkPromotedExtensions(DeviceExtSet* extensions, uint32_t version) {
    for (const DeviceExtInfo& info : sDeviceExtInfos) {
        if (info.versionPromoted <= version) {
            extensions->set(info.index, true);
        }
    }
}

// A static array for VulkanLayerInfo that can be indexed with VulkanLayers.
// GetVulkanLayerInfo checks that "index" matches the index used to access this array so an
// assert will fire if it isn't in the correct order.
static constexpr size_t kVulkanLayerCount = static_cast<size_t>(VulkanLayer::EnumCount);
static constexpr std::array<VulkanLayerInfo, kVulkanLayerCount> sVulkanLayerInfos{{
    //
    {VulkanLayer::Validation, "VK_LAYER_KHRONOS_validation"},
    {VulkanLayer::LunargVkTrace, "VK_LAYER_LUNARG_vktrace"},
    {VulkanLayer::RenderDocCapture, "VK_LAYER_RENDERDOC_Capture"},
    {VulkanLayer::FuchsiaImagePipeSwapchain, "VK_LAYER_FUCHSIA_imagepipe_swapchain"},
    //
}};

const VulkanLayerInfo& GetVulkanLayerInfo(VulkanLayer layer) {
    uint32_t index = static_cast<uint32_t>(layer);
    DAWN_ASSERT(index < sVulkanLayerInfos.size());
    DAWN_ASSERT(sVulkanLayerInfos[index].layer == layer);
    return sVulkanLayerInfos[index];
}

absl::flat_hash_map<std::string, VulkanLayer> CreateVulkanLayerNameMap() {
    absl::flat_hash_map<std::string, VulkanLayer> result;
    for (const VulkanLayerInfo& info : sVulkanLayerInfos) {
        result.emplace(info.name, info.layer);
    }
    return result;
}

}  // namespace dawn::native::vulkan
// Copyright 2024 The Dawn & Tint Authors
//
// 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 above 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. Neither the name of the copyright holder nor the names of its
//    contributors may be used to endorse or promote products derived from
//    this software without specific prior written permission.
//
/


lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Khu vực dán","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Khối trích dẫn"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"about":{"copy":"Bản quyền © $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor 4","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu ","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","la


(void)niffs_close(fs, fd);

  return res;
}

int NIFFS_fstat(niffs *fs, int fd_ix, niffs_stat *s) {
 800373e:	4604      	mov	r4, r0
 8003740:	4615      	mov	r5, r2
  if (!fs->mounted) return ERR_NIFFS_NOT_MOUNTED;
 8003742:	b323      	cbz	r3, 800378e <NIFFS_fstat+0x56>
  int res;

  niffs_file_desc *fd;
  res = niffs_get_filedesc(fs, fd_ix, &fd);
 8003744:	aa01      	add	r2, sp, #4
 8003746:	f001 fb45 	bl	8004dd4 <niffs_get_filedesc>
  if (res != NIFFS_OK) return res;
 800374a:	4606      	mov	r6, r0
 800374c:	bb08      	cbnz	r0, 8003792 <NIFFS_fstat+0x5a>

  niffs_object_hdr *ohdr = (niffs_object_hdr *)_NIFFS_PIX_2_ADDR(fs, fd->obj_pix);
 800374e:	9b01      	ldr	r3, [sp, #4]
 8003750:	6a22      	ldr	r2, [r4, #32]
 8003752:	8858      	ldrh	r0, [r3, #2]
 8003754:	68e1      	ldr	r1, [r4, #12]
 8003756:	fbb0 f3f2 	udiv	r3, r0, r2
 800375a:	fb02 0213 	mls	r2, r2, r3, r0
 800375e:	4351      	muls	r1, r2
 8003760:	68a7      	ldr	r7, [r4, #8]

  s->obj_id = ohdr->phdr.id.obj_id;
  s->size = ohdr->len == NIFFS_UNDEF_LEN ? 0 : ohdr->len;
  s->type = ohdr->type;
  niffs_strncpy((char *)s->name, (char *)ohdr->name, NIFFS_NAME_LEN);
 8003762:	f105 0008 	add.w	r0, r5, #8

  niffs_file_desc *fd;
  res = niffs_get_filedesc(fs, fd_ix, &fd);
  if (res != NIFFS_OK) return res;

  niffs_object_hdr *ohdr = (niffs_object_hdr *)_NIFFS_PIX_2_ADDR(fs, fd->obj_pix);
 8003766:	fb07 1303 	mla	r3, r7, r3, r1
 800376a:	6821      	ldr	r1, [r4, #0]
 800376c:	3304      	adds	r3, #4
 800376e:	4419      	add	r1, r3

  s->obj_id = ohdr->phdr.id.obj_id;
 8003770:	784b      	ldrb	r3, [r1, #1]
  s->size = ohdr->len == NIFFS_UNDEF_LEN ? 0 : ohdr->len;
  s->type = ohdr->type;
  niffs_strncpy((char *)s->name, (char *)ohdr->name, NIFFS_NAME_LEN);
 8003772:	2210      	movs	r2, #16
  res = niffs_get_filedesc(fs, fd_ix, &fd);
  if (res != NIFFS_OK) return res;

  niffs_object_hdr *ohdr = (niffs_object_hdr *)_NIFFS_PIX_2_ADDR(fs, fd->obj_pix);

  s->obj_id = oh


, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package org.blackdread.cameraframework.api.constant;

import com.google.common.collect.Lists;
import org.blackdread.camerabinding.jna.EdsdkLibrary;

import java.util.List;

/**
 *
Created on 2018/10/05.

 *
 * @author Yoann CAPLAIN
 */
class EdsBatteryLevel2Test extends ConstantValueFromLibraryTest<EdsBatteryLevel2> {

    @Override
    EdsBatteryLevel2 getOneEnumValue() {
        return EdsBatteryLevel2.kEdsBatteryLevel2_AC;
    }

    @Override
    EdsBatteryLevel2[] getAllEnumValues() {
        return EdsBatteryLevel2.values();
    }

    @Override
    Class<?> getLibraryClass() {
        return EdsdkLibrary.EdsBatteryLevel2.class;
    }

    @Override
    List<EdsBatteryLevel2> skipCheckDuplicateValues() {
        return Lists.newArrayList(EdsBatteryLevel2.kEdsBatteryLevel2_Empty, EdsBatteryLevel2.kEdsBatteryLevel2_BCLevel);
    }
}
package org.blackdread.cameraframework.api.command.builder;

import org.blackdread.camerabinding.jna.EdsdkLibrary;
import org.blackdread.cameraframework.api.camera.CanonCamera;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

/**
 *
Created on 2018/12/16.

 *
 * @author Yoann CAPLAIN
 */
class CloseSessionOptionBuilderTest {

    private EdsdkLibrary.EdsCameraRef cameraRef;
    private CloseSessionOptionBuilder builder;

    @BeforeEach
    void setUp() {
        cameraRef = new EdsdkLibrary.EdsCameraRef();
        builder = new CloseSessionOptionBuilder();
    }

    @Test
    void setCameraRef() {
        final CloseSessionOption option = builder
            .setCameraRef(cameraRef)
            .build();
        Assertions.assertNotNull(option.getCameraRef());
        Assertions.assertFalse(option.getCamera().isPresent());
        Assertions.assertTrue(option.isReleaseCameraRef());
    }

    @Test
    void setCameraRefThrowsOnNull() {
        Assertions.assertThrows(NullPointerException.class, () -> builder.setCameraRef(null));
    }

    @Test
    void setReleaseCameraRef() {
        final CloseSessionOption option = builder
            .setCameraRef(cameraRef)
            .setReleaseCameraRef(true)
            .build();
        Assertions.assertNotNull(option.getCameraRef());
        Assertions.assertTrue(option.isReleaseCameraRef());

        final CloseSessionOption option1 = builder.build();
        Assertions.assertEquals(option, option1);
        Assertions.assertEquals(option.hashCode(), option1.hashCode());
    }

    @Test
    void setCamera() {
        final CloseSessionOption option = builder
            .setCameraRef(cameraRef)
            .setCamera(null)
            .build();
        Assertions.assertNotNull(option.getCameraRef());
        Assertions.assertFalse(option.getCamera().isPresent());
        final CloseSessionOption option1 = builder
            .setCameraRef(cameraRef)
            .setCamera


化] 慢燃无烟火药",
"Solway Firth":"索尔威湾（英国）",
"soly":" [医][=solubility]可溶性, 溶解度, 溶解性",
"solyanka":"<俄> n.色尔扬可汤,蔬菜肉(或鱼)汤",
"solypertine":"[化] 索立哌汀",
"Solzhenitsyn":"n. (Solzhenitsyn)人名；(俄)索尔仁尼琴",
"SOM":"[计] 报文开始符",
"soma":"n. 身体, 肉体, 身体细胞\\n[医] 体, 躯体",
"somacule":"[医] 原微粒(一种假想单位)",
"somaesthesia":" 体感觉",
"somaesthesis":" 躯体觉; 体感觉",
"Somagyi's reflex":"[医] 索马吉氏反射(呼吸瞳孔反射)",
"Somagyi's sign":"[医] 索马吉氏征(呼吸瞳孔反射)",
"somal":"[医] 体的, 躯体的",
"Somali":"n. 索马里人",
"Somali myrrh":"[医] 索马里没药",
"Somali peninsula":"[网络] 索马里半岛",
"Somalia":"n. 索马里",
"Somalian":"a. , n. Somalia的变形",
"Somalian monetary unit":"[网络] 索马里货币单位",
"Somalian shilling":"[网络] 索马里先令",
"Somalians":"(Somalian 的复数) adj., n. Somalia的变形",
"Somaliland":"索马里兰[东非一地区]",
"somalin":"[医] 索马林(强心甙,获自夹竹桃类植物Adenium somalense)",
"somalis":"n. （东非国家）索马里族（人）索马里语( Somali的复数形式 )",
"Soman":"n. [亦作s-][化]索曼,甲氟磷酸异已酯(一种胆硷酯酶抑制剂)",
"somaplasm":"n. 体细胞原生质, 体细胞浆",
"somascope":"n. 超声波检查仪",
"somasteroid":"a. 体海星纲的,体海星亚纲的",
"Somasteroidea":"体海星亚纲",
"somasthenia":"体无力, 疲惫",
"somat-":" 躯体",
"somata":"soma的复数形",
"somataesthesis":"[网络] 体细胞",
"somatalgia":"[医] 躯体痛",
"somatasthenia":"[医] 体无力, 疲惫",
"Somateria":"[网络] 绒鸭属",
"somatestbhetic":"[医] 躯体感觉的",
"somatesthesia":"躯体感觉, 体觉",
"somatesthetic":"躯体感觉的",
"somatic":"a. 身体的, 肉体的, 壁体的\\n[医] 躯体的, 体壁的",
"somatic agglutinin":"[医] 菌体凝集素",
"somatic antigen":"[医] 菌体抗原, O抗原, 不动型抗原",
"somatic cavity":"[医


imensions_are_powers_of_2(&self) -> bool {
        self.x().is_positive()
            && self.y().is_positive()
            && self.z().is_positive()
            && (self.x() as u32).is_power_of_two()
            && (self.y() as u32).is_power_of_two()
            && (self.z() as u32).is_power_of_two()
    }

    #[inline]
    fn is_cube(&self) -> bool {
        self.x() == self.y() && self.x() == self.z()
    }
}

impl Neighborhoods for Point3i {
    #[inline]
    fn corner_offsets() -> Vec<Self> {
        vec![
            PointN([0, 0, 0]),
            PointN([1, 0, 0]),
            PointN([0, 1, 0]),
            PointN([1, 1, 0]),
            PointN([0, 0, 1]),
            PointN([1, 0, 1]),
            PointN([0, 1, 1]),
            PointN([1, 1, 1]),
        ]
    }

    #[inline]
    fn von_neumann_offsets() -> Vec<Self> {
        vec![
            PointN([-1, 0, 0]),
            PointN([1, 0, 0]),
            PointN([0, -1, 0]),
            PointN([0, 1, 0]),
            PointN([0, 0, -1]),
            PointN([0, 0, 1]),
        ]
    }

    // Because there are "moore" of them... huehuehue
    #[inline]
    fn moore_offsets() -> Vec<Self> {
        vec![
            PointN([-1, -1, -1]),
            PointN([0, -1, -1]),
            PointN([1, -1, -1]),
            PointN([-1, 0, -1]),
            PointN([0, 0, -1]),
            PointN([1, 0, -1]),
            PointN([-1, 1, -1]),
            PointN([0, 1, -1]),
            PointN([1, 1, -1]),
            PointN([-1, -1, 0]),
            PointN([0, -1, 0]),
            PointN([1, -1, 0]),
            PointN([-1, 0, 0]),
            PointN([1, 0, 0]),
            PointN([-1, 1, 0]),
            PointN([0, 1, 0]),
            PointN([1, 1, 0]),
            PointN([-1, -1, 1]),
            PointN([0, -1, 1]),
            PointN([1, -1, 1]),
            PointN([-1, 0, 1]),
            PointN([0, 0, 1]),
            PointN([1, 0, 1]),
            PointN([-1, 1, 1]),
            PointN([0, 1, 1]),
            PointN([1, 1, 1]),
        ]
    }
}

// This particular partial order allows us to say that an `Extent3i` e contains a `Point3i` p iff p
// is GEQ the minimum of e and p is LEQ the maximum of e.
impl<T> PartialOrd for Point3<T>
where
    T: Copy + PartialOrd,
{
    #[inline]
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        if self < other {
            Some(Ordering::Less)
        } else if self > other {
            Some(Ordering::Greater)
        } else if self.x() == other.x() && self.y() == other.y() && self.z() == other.z() {
            Some(Ordering::Equal)
        } else {
            None
        }
    }

    #[inline]
    fn lt(&