/* s_modff.c -- float version of s_modf.c.
 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
 */

/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */

#include "math.h"
#include "math_private.h"

static const float one = 1.0;

float
modff(float x, float *iptr)
{
	int32_t i0,j0;
	u_int32_t i;
	GET_FLOAT_WORD(i0,x);
	j0 = ((i0>>23)&0xff)-0x7f;	/* exponent of x */
	if(j0<23) {			/* integer part in x */
	    if(j0<0) {			/* |x|<1 */
	        SET_FLOAT_WORD(*iptr,i0&0x80000000);	/* *iptr = +-0 */
		return x;
	    } else {
		i = (0x007fffff)>>j0;
		if((i0&i)==0) {			/* x is integral */
		    u_int32_t ix;
		    *iptr = x;
		    GET_FLOAT_WORD(ix,x);
		    SET_FLOAT_WORD(x,ix&0x80000000);	/* return +-0 */
		    return x;
		} else {
		    SET_FLOAT_WORD(*iptr,i0&(~i));
		    return x - *iptr;
		}
	    }
	} else {			/* no fraction part */
	    u_int32_t ix;
	    *iptr = x*one;
	    if (x != x)			/* NaN */
		return x;
	    GET_FLOAT_WORD(ix,x);
	    SET_FLOAT_WORD(x,ix&0x80000000);	/* return +-0 */
	    return x;
	}
}


pub fn spatial_ref(&self) -> Result<SpatialRef> {
        unsafe { SpatialRef::from_c_obj(gdal_sys::GDALGetSpatialRef(self.c_dataset)) }
    }

    #[cfg(major_ge_3)]
    /// Set the spatial reference system for this dataset.
    pub fn set_spatial_ref(&mut self, spatial_ref: &SpatialRef) -> Result<()> {
        let rv = unsafe { gdal_sys::GDALSetSpatialRef(self.c_dataset, spatial_ref.to_c_hsrs()) };
        if rv != CPLErr::CE_None {
            return Err(_last_cpl_err(rv));
        }
        Ok(())
    }

    pub fn create_copy(
        &self,
        driver: &Driver,
        filename: &str,
        options: &[RasterCreationOption],
    ) -> Result<Dataset> {
        let c_filename = CString::new(filename)?;

        let mut c_options = CslStringList::new();
        for option in options {
            c_options.set_name_value(option.key, option.value)?;
        }

        let c_dataset = unsafe {
            gdal_sys::GDALCreateCopy(
                driver.c_driver(),
                c_filename.as_ptr(),
                self.c_dataset,
                0,
                c_options.as_ptr(),
                None,
                ptr::null_mut(),
            )
        };
        if c_dataset.is_null() {
            return Err(_last_null_pointer_err("GDALCreateCopy"));
        }
        Ok(unsafe { Dataset::from_c_dataset(c_dataset) })
    }

    /// Fetch the driver to which this dataset relates.
    pub fn driver(&self) -> Driver {
        unsafe {
            let c_driver = gdal_sys::GDALGetDatasetDriver(self.c_dataset);
            Driver::from_c_driver(c_driver)
        }
    }

    /// Fetch a band object for a dataset.
    ///
    /// Applies to raster datasets, and fetches the
    /// rasterband at the given _1-based_ index.
    pub fn rasterband(&self, band_index: isize) -> Result<RasterBand> {
        unsafe {
            let c_band = gdal_sys::GDALGetRasterBand(self.c_dataset, band_index as c_int);
            if c_band.is_null() {
                return Err(_last_null_pointer_err("GDALGetRasterBand"));
            }
            Ok(RasterBand::from_c_rasterband(self, c_band))
        }
    }

    /// Builds overviews for the current `Dataset`. See [`GDALBuildOverviews`].
    ///
    /// # Arguments
    /// * `resampling` - resampling method, as accepted by GDAL, e.g. `"CUBIC"`
    /// * `overviews` - list of overview decimation factors, e.g. `&[2, 4, 8, 16, 32]`
    /// * `bands` - list of bands to build the overviews for, or empty for all bands
    ///
    /// [`GDALBuildOverviews`]: https://gdal.org/doxygen/gdal_8h.html#a767f4456a6249594ee18ea53f68b7e80
    pub fn build_overviews(
        &mut self,
        resampling: &str,
        overviews: &[i32],
        bands: &[i32],
    ) -> Result<()> {
        let c_resampling = CString::new(resampling)?;
        let rv = unsafe {
            gdal_sys::GDALBuildOverviews(
                self.c_dataset,
                c_resampling.as_ptr(),
                overviews.len() as i32,
                overviews.as_ptr() as *mut i32,
                bands.len() as i32,
                ban


/*
 *	STP SAP demux
 *
 *	Copyright (c) 2008 Patrick McHardy <kaber@trash.net>
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License
 *	version 2 as published by the Free Software Foundation.
 */
#include <linux/mutex.h>
#include <linux/skbuff.h>
#include <linux/etherdevice.h>
#include <linux/llc.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <net/llc.h>
#include <net/llc_pdu.h>
#include <net/stp.h>

/* 01:80:c2:00:00:20 - 01:80:c2:00:00:2F */
#define GARP_ADDR_MIN	0x20
#define GARP_ADDR_MAX	0x2F
#define GARP_ADDR_RANGE	(GARP_ADDR_MAX - GARP_ADDR_MIN)

static const struct stp_proto __rcu *garp_protos[GARP_ADDR_RANGE + 1] __read_mostly;
static const struct stp_proto __rcu *stp_proto __read_mostly;

static struct llc_sap *sap __read_mostly;
static unsigned int sap_registered;
static DEFINE_MUTEX(stp_proto_mutex);

/* Called under rcu_read_lock from LLC */
static int stp_pdu_rcv(struct sk_buff *skb, struct net_device *dev,
		       struct packet_type *pt, struct net_device *orig_dev)
{
	const struct ethhdr *eh = eth_hdr(skb);
	const struct llc_pdu_un *pdu = llc_pdu_un_hdr(skb);
	const struct stp_proto *proto;

	if (pdu->ssap != LLC_SAP_BSPAN ||
	    pdu->dsap != LLC_SAP_BSPAN ||
	    pdu->ctrl_1 != LLC_PDU_TYPE_U)
		goto err;

	if (eh->h_dest[5] >= GARP_ADDR_MIN && eh->h_dest[5] <= GARP_ADDR_MAX) {
		proto = rcu_dereference(garp_protos[eh->h_dest[5] -
						    GARP_ADDR_MIN]);
		if (proto &&
		    !ether_addr_equal(eh->h_dest, proto->group_address))
			goto err;
	} else
		proto = rcu_dereference(stp_proto);

	if (!proto)
		goto err;

	proto->rcv(proto, skb, dev);
	return 0;

err:
	kfree_skb(skb);
	return 0;
}

int stp_proto_register(const struct stp_proto *proto)
{
	int err = 0;

	mutex_lock(&stp_proto_mutex);
	if (sap_registered++ == 0) {
		sap = llc_sap_open(LLC_SAP_BSPAN, stp_pdu_rcv);
		if (!sap) {
			err = -ENOMEM;
			goto out;
		}
	}
	if (is_zero_ether_addr(proto->group_address))
		rcu_assign_pointer(stp_proto, proto);
	else
		rcu_assign_pointer(garp_protos[proto->group_address[5] -
					       GARP_ADDR_MIN], proto);
out:
	mutex_unlock(&stp_proto_mutex);
	return err;
}
EXPORT_SYMBOL_GPL(stp_proto_register);

void stp_proto_unregister(const struct stp_proto *proto)
{
	mutex_lock(&stp_proto_mutex);
	if (is_zero_ether_addr(proto->group_address))
		RCU_INIT_POINTER(stp_proto, NULL);
	else
		RCU_INIT_POINTER(garp_protos[proto->group_address[5] -
					       GARP_ADDR_MIN], NULL);
	synchronize_rcu();

	if (--sap_registered == 0)
		llc_sap_put(sap);
	mutex_unlock(&stp_proto_mutex);
}
EXPORT_SYMBOL_GPL(stp_proto_unregister);

MODULE_LICENSE("GPL");


/evaluation design, it is intended to be replicated, modified or integrated in production volume by others.
It has already gone through all FCC/CE ROHS REACH UKCA, EMI/RFI ESD certifications and is available globally
Several 3rd party manufacturers (such as Holybro.com) provide this or derivative commercial products.

![MR-VMU-RT1176 Upright Image](../../assets/flight_controller/nxp_mr-vmu-rt1176/mr-vmu-rt1176_upleft.jpg)

The board includes the same FMU module found on Pixhawk 6X-RT paired with an NXP-based carrier board.
The carrier board offers 100Base-T1 (two-wire) automotive ethernet, an NFC antenna (Connected to SE051), and a third CAN bus.
It also removes the IO processor to enable 12 PWM ports, with 8 providing Dshot capability.

This board takes advantage of multiple Pixhawk® open standards, such as the FMUv6X-RT Standard, [Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf), and [Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf).
Equipped with a high performance NXP i.mx RT1176 dual core Processor, modular design, triple redundancy, temperature-controlled IMU board, isolated sensor domains, delivering incredible performance, reliability, and flexibility.

:::tip
This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams.
:::

## 소개

Inside the MR-VMU-RT1176, you can find an NXP i.MX RT1176, paired with sensor technology from Bosch®, InvenSense®, giving you flexibility and reliability for controlling any autonomous vehicle, suitable for both academic and commercial applications.

The Pixhawk® 6X-RT's i.MX RT1176 Crossover dual-core MCU contain an Arm® Cortex®-M7 core running up to 1GHz and Arm® Cortex®-M4 core running up to 400MHz, has 2MB SRAM and external XIP Flash with 64MB.
The PX4 Autopilot takes advantage of the increased processing power and RAM.
Thanks to this increased processing power, developers can be more productive and efficient with their development work, allowing for complex algorithms and models.

The FMUv6X-RT open standard includes high-performance, low-noise IMUs on board, designed for better stabilization.
Triple-redundant IMU & double-redundant barometer on separate buses.
When PX4 detects a sensor failure, the system seamlessly switches to another to maintain flight control reliability.

An independent LDO powers every sensor set with independent power control.
A vibration isolation System to filter out high-frequency vibration and reduce noise to ensure accurate readings, allowing vehicles to reach better overall flight performances.

External sensor bus (SPI5) has two chip select lines and data-ready signals for additional sensors and payload with SPI-interface, and with an integrated Microchip Ethernet PHY, high-speed communication with mission computers via ethernet is now


t generates a
// reasonable valid schedule using a priority queue. TODO(khr):
// schedule smarter.
func schedule(f *Func) {
	// reusable priority queue
	priq := new(ValHeap)

	// "priority" for a value
	score := f.Cache.allocInt8Slice(f.NumValues())
	defer f.Cache.freeInt8Slice(score)

	// maps mem values to the next live memory value
	nextMem := f.Cache.allocValueSlice(f.NumValues())
	defer f.Cache.freeValueSlice(nextMem)

	// inBlockUses records whether a value is used in the block
	// in which it lives. (block control values don't count as uses.)
	inBlockUses := f.Cache.allocBoolSlice(f.NumValues())
	defer f.Cache.freeBoolSlice(inBlockUses)
	if f.Config.optimize {
		for _, b := range f.Blocks {
			for _, v := range b.Values {
				for _, a := range v.Args {
					if a.Block == b {
						inBlockUses[a.ID] = true
					}
				}
			}
		}
	}
	priq.inBlockUses = inBlockUses

	for _, b := range f.Blocks {
		// Compute score. Larger numbers are scheduled closer to the end of the block.
		for _, v := range b.Values {
			switch {
			case v.Op.isLoweredGetClosurePtr():
				// We also score GetLoweredClosurePtr as early as possible to ensure that the
				// context register is not stomped. GetLoweredClosurePtr should only appear
				// in the entry block where there are no phi functions, so there is no
				// conflict or ambiguity here.
				if b != f.Entry {
					f.Fatalf("LoweredGetClosurePtr appeared outside of entry block, b=%s", b.String())
				}
				score[v.ID] = ScorePhi
			case opcodeTable[v.Op].nilCheck:
				// Nil checks must come before loads from the same address.
				score[v.ID] = ScoreNilCheck
			case v.Op == OpPhi:
				// We want all the phis first.
				score[v.ID] = ScorePhi
			case v.Op == OpArgIntReg || v.Op == OpArgFloatReg:
				// In-register args must be scheduled as early as possible to ensure that they
				// are not stomped (similar to the closure pointer above).
				// In particular, they need to come before regular OpArg operations because
				// of how regalloc places spill code (see regalloc.go:placeSpills:mustBeFirst).
				if b != f.Entry {
					f.Fatalf("%s appeared outside of entry block, b=%s", v.Op, b.String())
				}
				score[v.ID] = ScorePhi
			case v.Op == OpArg || v.Op == OpSP || v.Op == OpSB:
				// We want all the args as early as possible, for better debugging.
				score[v.ID] = ScoreArg
			case v.Op == OpInitMem:
				// Early, but after args. See debug.go:buildLocationLists
				score[v.ID] = ScoreInitMem
			case v.Type.IsMemory():
				// Schedule stores as early as possible. This tends to
				// reduce register pressure.
				score[v.ID] = ScoreMemory
			case v.Op == OpSelect0 || v.Op == OpSelect1 || v.Op == OpSelectN:
				// Tuple selectors need to appear immediately after the instruction
				// that generates the tuple.
				score[v.ID] = ScoreReadTuple
			case v.hasFlagInput():
				// Schedule flag-reading ops earlier, to minimize the lifetime
				// of flag values.
				score


 = db6_shirt;
  model3.subTitle = "Get 50% off";
  model3.title = "For a limited time";
  categories.add(model);
  categories.add(model1);
  categories.add(model2);
  categories.add(model3);
  return categories;
}

List<DB7Topic> getDB7TodayData() {
  List<DB7Topic> data = [];
  data.add(DB7Topic("Participation in Extracurricular Activities", db7_item4,
      "Civil Hospital", 200, 20));
  data.add(DB7Topic("Depression", db7_item5, "Orange Hospital", 200, 20));
  data.add(
      DB7Topic("illnesses", db7_item3, "Fudan University Hospital", 200, 20));
  data.add(DB7Topic("Participation in Extracurricular Activities", db7_item4,
      "Parsi Hospital", 200, 20));
  return data;
}

List<DB8Scene> getScene() {
  List<DB8Scene> categories = [];
  categories.add(DB8Scene(db8_ic_home, "Home"));
  categories.add(DB8Scene(db8_ic_door, "Away"));
  categories.add(DB8Scene(db8_ic_sleep, "Sleep"));
  categories.add(DB8Scene(db8_ic_alarm, "Get up"));

  return categories;
}

List<DB8Rooms> getRooms() {
  List<DB8Rooms> categories = [];
  categories.add(DB8Rooms("Living Room", db8_ic_item6, "6 device"));
  categories.add(DB8Rooms("Bed Rooms", db8_ic_item5, "1 device"));
  categories.add(DB8Rooms("Rest Room", db8_ic_item7, "3 device"));

  return categories;
}
import "package:intl/intl.dart";

class Utils {
  static final DateFormat _monthFormat = new DateFormat("MMMM yyyy");
  static final DateFormat _dayFormat = new DateFormat("dd");
  static final DateFormat _firstDayFormat = new DateFormat("MMM dd");
  static final DateFormat _fullDayFormat = new DateFormat("EEE MMM dd, yyyy");
  static final DateFormat _apiDayFormat = new DateFormat("yyyy-MM-dd");

  static String formatMonth(DateTime d) => _monthFormat.format(d);

  static String formatDay(DateTime d) => _dayFormat.format(d);

  static String formatFirstDay(DateTime d) => _firstDayFormat.format(d);

  static String fullDayFormat(DateTime d) => _fullDayFormat.format(d);

  static String apiDayFormat(DateTime d) => _apiDayFormat.format(d);

  static const List<String> weekdays = const ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

  /// The list of days in a given month
  static List<DateTime> daysInMonth(DateTime month) {
    var first = firstDayOfMonth(month);
    var daysBefore = first.weekday;
    var firstToDisplay = first.subtract(new Duration(days: daysBefore));
    var last = Utils.lastDayOfMonth(month);

    var daysAfter = 7 - last.weekday;

    // If the last day is sunday (7) the entire week must be rendered
    if (daysAfter == 0) {
      daysAfter = 7;
    }

    var lastToDisplay = last.add(new Duration(days: daysAfter));
    return daysInRange(firstToDisplay, lastToDisplay).toList();
  }

  static bool isFirstDayOfMonth(DateTime day) {
    return isSameDay(firstDayOfMonth(day), day);
  }

  static bool isLastDayOfMonth(DateTime day) {
    return isSameDay(lastDayOfMonth(day), day);
  }

  static DateTime firstDayOfMonth(DateTime month) {
    return new DateTime(month.year, month.month);
  }

  static DateTime firstDayOfWeek(DateTime day) {
    /// Handle Daylight Savings by setting


y of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with the GNU C Library; see the file COPYING.LIB.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#include <sysdep.h>

#ifndef SYS_sigreturn
#define SYS_sigreturn 103
#endif

ENTRY(__sigreturn)
	li v0, SYS_sigreturn
	syscall
	.end __sigreturn

weak_alias (__sigreturn, sigreturn)


::LDRBpost:
  case AArch64::LDRHHpost:
  case AArch64::LDRHpost:
  case AArch64::LDRSBWpost:
  case AArch64::LDRSBXpost:
  case AArch64::LDRSHWpost:
  case AArch64::LDRSHXpost:
  case AArch64::LDRSWpost:
  case AArch64::LDRWpost:
  case AArch64::LDRXpost: {
    unsigned Rt = Inst.getOperand(1).getReg();
    unsigned Rn = Inst.getOperand(2).getReg();
    if (RI->isSubRegisterEq(Rn, Rt))
      return Error(Loc[0], "unpredictable LDR instruction, writeback base "
                           "is also a source");
    break;
  }
  case AArch64::STRBBpost:
  case AArch64::STRBpost:
  case AArch64::STRHHpost:
  case AArch64::STRHpost:
  case AArch64::STRWpost:
  case AArch64::STRXpost:
  case AArch64::STRBBpre:
  case AArch64::STRBpre:
  case AArch64::STRHHpre:
  case AArch64::STRHpre:
  case AArch64::STRWpre:
  case AArch64::STRXpre: {
    unsigned Rt = Inst.getOperand(1).getReg();
    unsigned Rn = Inst.getOperand(2).getReg();
    if (RI->isSubRegisterEq(Rn, Rt))
      return Error(Loc[0], "unpredictable STR instruction, writeback base "
                           "is also a source");
    break;
  }
  case AArch64::STXRB:
  case AArch64::STXRH:
  case AArch64::STXRW:
  case AArch64::STXRX:
  case AArch64::STLXRB:
  case AArch64::STLXRH:
  case AArch64::STLXRW:
  case AArch64::STLXRX: {
    unsigned Rs = Inst.getOperand(0).getReg();
    unsigned Rt = Inst.getOperand(1).getReg();
    unsigned Rn = Inst.getOperand(2).getReg();
    if (RI->isSubRegisterEq(Rt, Rs) ||
        (RI->isSubRegisterEq(Rn, Rs) && Rn != AArch64::SP))
      return Error(Loc[0],
                   "unpredictable STXR instruction, status is also a source");
    break;
  }
  case AArch64::STXPW:
  case AArch64::STXPX:
  case AArch64::STLXPW:
  case AArch64::STLXPX: {
    unsigned Rs = Inst.getOperand(0).getReg();
    unsigned Rt1 = Inst.getOperand(1).getReg();
    unsigned Rt2 = Inst.getOperand(2).getReg();
    unsigned Rn = Inst.getOperand(3).getReg();
    if (RI->isSubRegisterEq(Rt1, Rs) || RI->isSubRegisterEq(Rt2, Rs) ||
        (RI->isSubRegisterEq(Rn, Rs) && Rn != AArch64::SP))
      return Error(Loc[0],
                   "unpredictable STXP instruction, status is also a source");
    break;
  }
  case AArch64::LDRABwriteback:
  case AArch64::LDRAAwriteback: {
    unsigned Xt = Inst.getOperand(0).getReg();
    unsigned Xn = Inst.g


} isStreamEntry - Determines if, when the base type of this field is an INFOTABLE, the contents of the info table will be derived from a stream entry.
    @property {function(AspectCollection):void} setAspects - Replaces all aspects on this field with the aspects in the specified collection.
    @property {function(BaseTypes):void} setBaseType - Assigns the specified base type to this field.
    @property {function(number):void} setOrdinal - Sets the ordinal value for this field.
*/

/**
    @typedef ValueCollectionList
    @type {ArrayList}
    @property {function():Infotable} convertToTypedInfoTable
    @property {function():ValueCollection} currentRow
    @property {function(ValueCollection):ValueCollection} find - arg0: values
    @property {function(ValueCollection, string[]):ValueCollection} find - arg0: values, arg1: columns
    @property {function(ValueCollection):number} findIndex
    @property {function():ValueCollection} getFirstRow
    @property {function():ValueCollection} getLastRow
    @property {function():number} getLength
    @property {function(number):ValueCollection} getRow - arg0: index
    @property {function():number} getRowCount
    @property {function(string):IPrimitiveType} getRowValue - arg0: name
    @property {function():void} moveToFirst
    @property {function():ValueCollection} nextRow
*/

/**
    @typedef ValueCollection
    @type {NamedObject}
    @property {function():ValueCollection} clone
    @property {function(*,DataShapeDefinition):ValueCollection} fromJSONTyped
    @property {function(string):*} 	getJSONSerializedValue
    @property {function(string):IPrimitiveType}  getPrimitive
    @property {function(string):string}  getStringValue
    @property {function(string):*} getValue
    @property {function(string):boolean} has
    @property {function(ValueCollection):boolean} matches
    @property {function():Infotable} toInfoTable
    @property {function():*} toJSON
    @property {function(DataShapeDefinition):*} toJSONTyped
    @property {function():NamedValueCollection} toNamedValueCollection
*/

/**
 * Do something
 * @param {DataTableThing} dataTable
 */
var doSome/*1*/thing = function (dataTable) {
};

/**
 * @callback SomeCallback
 * @param {number} foo
 * @param {string} bar
 */

 /**
  * Another thing
  * @type {SomeCallback}
  */
var anotherThing/*2*/ = function(a, b) {}`
	f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
	f.VerifyQuickInfoAt(t, "1", "var doSomething: (dataTable: DataTableThing) => void", "Do something")
	f.VerifyQuickInfoAt(t, "2", "var anotherThing: SomeCallback", "Another thing")
}
package fourslash_test

import (
	"testing"

	"github.com/microsoft/typescript-go/internal/fourslash"
	"github.com/microsoft/typescript-go/internal/testutil"
)

func TestQuickInfoJsDoc(t *testing.T) {
	t.Parallel()

	defer testutil.RecoverAndFail(t, "Panic on fourslash test")
	const content = `// @target: esnext
/**
 * A constant
 * @deprecated
 */
var foo = "foo";

/**
 * A function
 * @deprecated
 */
function fn() { }

/**
 * A class
 * @deprecated
 */
class C {
    /**
     * A field
     * @deprecated
     */
    field = "field";

    /**
     * A getter
     * @deprecated
     */
    get getter() {
        return;
    }

    /**
     * A method
     * @deprecated
     */
    m() { }

    get a() {
        this.field/*0*/;
        this.getter/*1*/;
        this.m/*2*/;
        foo/*3*/;
        C/*4*//;
        fn()/*5*/;

        return 1;
    }

    set a(value: number) {
        this.field/*6*/;
        this.getter/*7*/;
        this.m/*8*/;
        foo/*9*/;
        C/*10*/;
        fn/*11*/();
    }
}`
	f := fourslash.NewFourslash(t, nil /*capabilities


tilde operator = varies with = similar to,U+223C ISOtech -->
            // <!-- tilde operator is NOT the same character as the tilde, U+007E,although the same glyph might be used to represent both  -->
            { "cong", "8773" }, //approximately equal to, U+2245 ISOtech -->
            { "asymp", "8776" }, //almost equal to = asymptotic to,U+2248 ISOamsr -->
            { "ne", "8800" }, //not equal to, U+2260 ISOtech -->
            { "equiv", "8801" }, //identical to, U+2261 ISOtech -->
            { "le", "8804" }, //less-than or equal to, U+2264 ISOtech -->
            { "ge", "8805" }, //greater-than or equal to,U+2265 ISOtech -->
            { "sub", "8834" }, //subset of, U+2282 ISOtech -->
            { "sup", "8835" }, //superset of, U+2283 ISOtech -->
            // <!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included. Should it be, for symmetry?It is in ISOamsn  --> <!ENTITY nsub", "8836"},  //not a subset of, U+2284 ISOamsn -->
            { "sube", "8838" }, //subset of or equal to, U+2286 ISOtech -->
            { "supe", "8839" }, //superset of or equal to,U+2287 ISOtech -->
            { "oplus", "8853" }, //circled plus = direct sum,U+2295 ISOamsb -->
            { "otimes", "8855" }, //circled times = vector product,U+2297 ISOamsb -->
            { "perp", "8869" }, //up tack = orthogonal to = perpendicular,U+22A5 ISOtech -->
            { "sdot", "8901" }, //dot operator, U+22C5 ISOamsb -->
            // <!-- dot operator is NOT the same character as U+00B7 middle dot -->
            // <!-- Miscellaneous Technical -->
            { "lceil", "8968" }, //left ceiling = apl upstile,U+2308 ISOamsc  -->
            { "rceil", "8969" }, //right ceiling, U+2309 ISOamsc  -->
            { "lfloor", "8970" }, //left floor = apl downstile,U+230A ISOamsc  -->
            { "rfloor", "8971" }, //right floor, U+230B ISOamsc  -->
            { "lang", "9001" }, //left-pointing angle bracket = bra,U+2329 ISOtech -->
            // <!-- lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark' -->
            { "rang", "9002" }, //right-pointing angle bracket = ket,U+232A ISOtech -->
            // <!-- rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark' -->
            // <!-- Geometric Shapes -->
            { "loz", "9674" }, //lozenge, U+25CA ISOpub -->
            // <!-- Miscellaneous Symbols -->
            { "spades", "9824" }, //black spade suit, U+2660 ISOpub -->
            // <!-- black here seems to mean filled as opposed to hollow -->
            { "clubs", "9827" }, //black club suit = shamrock,U+2663 ISOpub -->
            { "hearts", "9829" }, //black heart suit = valentine,U+2665 ISOpub -->
            { "diams", "9830" }, //black diamond suit, U+2666 ISOpub -->

            // <!-- Latin Extended-A -->
            { "OElig", "338" }, //  -- latin capital ligature OE,U+0152 ISOlat2 -->
            { "oelig", "339" }, //  -- latin small ligature oe, U+0153 ISOlat2 -->
            // <!-- ligature is a misnomer, thi


restore data saved with the DUMP command (number of nodes changed)

        IMPORT
        import data from an external json file

        LAST
        display information on the last actions executed by the server

        SEARCH
        full-text search

    <mat-toolbar style="background: transparent; ">
      <button mat-button color="warn" class="dangerous-button" aria-label="drop" [tooltip]="helpService.tooltip('admin.drop.database')"
        triggers="mouseenter:mouseleave" (click)="actionToConfirm='drop'" [disabled]="working || !isAdmin">
        <mat-icon>delete_forever</mat-icon>
        DROP DATABASE
      </button>
      <button *ngIf="!readOnly" mat-button color="warn" class="dangerous-button" aria-label="read-only" [disabled]="working || !isAdmin"
        [tooltip]="helpService.tooltip('admin.readonly')" triggers="mouseenter:mouseleave" (click)="readOnlyMode()" >
        <mat-icon>lock</mat-icon>
        Read-only
      </button>
      <button *ngIf="readOnly" mat-button color="primary" class="dangerous-button" aria-label="read-write" [disabled]="working || !isAdmin"
        [tooltip]="ttReadWrite" triggers="mouseenter:mouseleave" (click)="readWriteMode()" [disabled]="working">
        <mat-icon>lock_open</mat-icon>
        Read-write
      </button>
    </mat-toolbar>

    <mat-form-field appearance="standard" style="min-width:20rem; padding-left: 1rem;">
      <mat-label>Backup directory</mat-label>
      <input matInput placeholder="mapping of network shared folder" [(ngModel)]="backupPath">
      <button mat-button *ngIf="backupPath" matSuffix mat-icon-button aria-label="Save" (click)="saveBackupPath()" [disabled]="working || !isAdmin"  [tooltip]="helpService.tooltip('admin.backup.dir')">
        <mat-icon>save</mat-icon>
      </button>
      <button mat-button matSuffix mat-icon-button aria-label="Info" *ngIf="detailedInfo" [tooltip]="helpService.tooltip('admin.backup.explain')">
        <mat-icon matSuffix>info</mat-icon>
      </button>
    </mat-form-field>
    <mat-toolbar style="background: transparent; ">
      <button mat-button color="primary" class="dangerous-button" aria-label="backup" [tooltip]="helpService.tooltip('admin.backup')"   [disabled]="working || !isAdmin || !backupPath"
        (click)="backup()">
        <mat-icon>cloud_upload</mat-icon>
        backup database
      </button>
    </mat-toolbar>

    <mat-form-field appearance="standard" style="padding-left: 1rem;min-width:20rem">
      <mat-label>select backup</mat-label>
      <mat-select placeholder="Value(s)" [multiple]="false" [(ngModel)]="selectedBackup" #multiSelect>
        <mat-option *ngFor="let val of backupList" [value]="val">
          {{val}}
        </mat-option>
      </mat-select>
    </mat-form-field>
    <mat-toolbar style="background: transparent; ">
      <button *ngIf="selectedBackup" mat-button color="warn" class="dangerous-button" aria-label="restore" [disabled]="working || !isAdmin"


f"{first_step['step taken'].split(' -> ')[0]}_{hash(first_step['content'])}"
#     dot.edge('question', first_node_id)

#     return dot, step_options, full_texts

# # 生成两组图，分别基于选中的问题
# dots_data, step_options_data, full_texts_data = generate_graph(data[selected_image_index])
# dots_data1, step_options_data1, full_texts_data1 = generate_graph(data1[selected_image_index])

# # 页面布局：左侧展示 data，右侧展示 data1，设置列的比例，调整比例增加宽度
# col1, col2 = st.columns([1.5, 1.5], gap="large")

# # 左侧选择要展示的步骤，默认为 "All Steps"
# selected_step = st.sidebar.selectbox("Select Step from Graph 1", step_options_data, index=0)
# selected_step1 = st.sidebar.selectbox("Select Step from Graph 2", step_options_data1, index=0)

# # 左侧：展示简化的图和选定步骤的完整内容
# with col1:
#     st.header("Graph 1: Without Backtrace")
#     st.graphviz_chart(dots_data)

#     if selected_step == 'All Steps':
#         st.subheader("Full Text for All Steps")
#         for i, (node, content) in enumerate(full_texts_data):
#             st.markdown(f"**Step {i}**")
#             st.write(content)
#     else:
#         step_index = int(selected_step.split()[-1])
#         st.subheader(f"Full Text for {selected_step}")
#         st.write(full_texts_data[step_index][1])

# # 右侧：展示简化的图和选定步骤的完整内容
# with col2:
#     st.header("Graph 2: With Backtrace")
#     st.graphviz_chart(dots_data1)

#     if selected_step1 == 'All Steps':
#         st.subheader("Full Text for All Steps")
#         for i, (node, content) in enumerate(full_texts_data1):
#             st.markdown(f"**Step {i}**")
#             st.write(content)
#     else:
#         step_index1 = int(selected_step1.split()[-1])
#         st.subheader(f"Full Text for {selected_step1}")
#         st.write(full_texts_data1[step_index1][1])


from airflow.exceptions import AirflowException
import pendulum
from datetime import timedelta
# Airflow 3.0 부터 아래 경로로 import
# from airflow.providers.standard.operators.bash import BashOperator
# from airflow.sdk import DAG, task, Variable

# Airflow 2.10.5 이하 버전에서 실습시 아래 경로에서 import
from airflow import DAG
from airflow.decorators import task
from airflow.models import Variable
from airflow.operators.bash import BashOperator

email_str = Variable.get("email_target")
email_lst = [email.strip() for email in email_str.split(',')]

with DAG(
    dag_id='dags_email_on_failure',
    start_date=pendulum.datetime(2025,9,11, tz='Asia/Seoul'),
    catchup=False,
    schedule='0 1 * * *',
    dagrun_timeout=timedelta(minutes=2),
    default_args={
        'email_on_failure': True,
        'email': email_lst
    }
) as dag:
    @task(task_id='python_fail')
    def python_task_func():
        raise AirflowException('에러 발생') # 에러 유도
    python_task_func()

    bash_fail = BashOperator(
        task_id='bash_fail',
        bash_command='exit 1', # 에러 유도
    )

    bash_success = BashOperator(
        task_id='bash_success',
        bash_command='exit 0',
    )


NUIE::ConnectionDisplayMode UIInputSlot::GetConnectionDisplayMode () const
{
	return connDisplayMode;
}

void UIInputSlot::SetConnectionDisplayMode (ConnectionDisplayMode newConnectionDisplayMode)
{
	connDisplayMode = newConnectionDisplayMode;
}

void UIInputSlot::RegisterCommands (InputSlotCommandRegistrator& commandRegistrator) const
{
	class SetConnectionDisplayModeCommand : public InputSlotCommand
	{
	public:
		SetConnectionDisplayModeCommand (const NE::LocString& name, bool isChecked, ConnectionDisplayMode connDisplayMode) :
			InputSlotCommand (name, isChecked),
			connDisplayMode (connDisplayMode)
		{

		}

		virtual void Do (NodeUIManager& uiManager, NodeUIEnvironment& uiEnvironment, UIInputSlotPtr& inputSlot) override
		{
			SetInputSlotConnectionDisplayModeCommand command (inputSlot, connDisplayMode);
			uiManager.ExecuteCommand (command, uiEnvironment);
		}

	private:
		ConnectionDisplayMode connDisplayMode;
	};

	if (IsFeatureEnabled (Feature::ConnectionDisplay)) {
		InputSlotGroupCommandPtr connectionDisplayGroupCommand (new NodeGroupCommand<InputSlotCommandPtr> (NE::LocString (L"Connection Display")));
		connectionDisplayGroupCommand->AddChildCommand (InputSlotCommandPtr (new SetConnectionDisplayModeCommand (NE::LocString (L"Normal"), connDisplayMode == ConnectionDisplayMode::Normal, ConnectionDisplayMode::Normal)));
		connectionDisplayGroupCommand->AddChildCommand (InputSlotCommandPtr (new SetConnectionDisplayModeCommand (NE::LocString (L"Hidden"), connDisplayMode == ConnectionDisplayMode::Hidden, ConnectionDisplayMode::Hidden)));
		commandRegistrator.RegisterSlotGroupCommand (connectionDisplayGroupCommand);
	}
}

NE::Stream::Status UIInputSlot::Read (NE::InputStream& inputStream)
{
	NE::ObjectHeader header (inputStream);
	InputSlot::Read (inputStream);
	name.Read (inputStream);
	if (header.GetVersion () > 1) {
		NE::ReadEnum<ConnectionDisplayMode> (inputStream, connDisplayMode);
	}
	return inputStream.GetStatus ();
}

NE::Stream::Status UIInputSlot::Write (NE::OutputStream& outputStream) const
{
	NE::ObjectHeader header (outputStream, serializationInfo);
	InputSlot::Write (outputStream);
	name.Write (outputStream);
	NE::WriteEnum<ConnectionDisplayMode> (outputStream, connDisplayMode);
	return outputStream.GetStatus ();
}

}
#include "NUIE_UIItemFinder.hpp"

namespace NUIE
{

static const double SlotSnappingDistanceInPixel = 20.0;

template <class SlotType>
Point GetSlotConnPosition (const UINodePtr& uiNode, const NE::SlotId& slotId, NodeUIDrawingEnvironment& env);

template <class SlotType>
bool HasSlotRect (const UINodePtr& uiNode, const NE::SlotId& slotId, NodeUIDrawingEnvironment& env);

template <class SlotType>
Rect GetSlotRect (const UINodePtr& uiNode, const NE::SlotId& slotId, NodeUIDrawingEnvironment& env);

template <class SlotType>
static void EnumerateUISlots (const UINodePtr& uiNode, const std::function<bool (SlotType)>& processor);

template <>
Point GetSlotConnPosition<UIInputSlotPtr> (const UINodePtr& uiNode, const NE::SlotId& slotId, NodeUIDrawingEnvironment& env)
{
	return uiNode->GetInputSlotConnPosition (env, slotId);
}

template <>
Point GetSlotConnPosition<UIOutputSlotPtr> (const UINodePtr& uiNode, const NE::SlotId& slotId, NodeUIDrawingEnvironment& env)
{
	return


;		/* active low  */
	PCMCIA_PGCRX(slot) = reg;
	udelay(500);

	debug ("PCMCIA power OFF\n");
	/*
	* Configure Port B pins for
	* 3 Volts enable
	*/
	cp->cp_pbdir |=  KUP4K_PCMCIA_B_3V3;
	cp->cp_pbpar &= ~KUP4K_PCMCIA_B_3V3;
	/* remove all power */
	cp->cp_pbdat |=  KUP4K_PCMCIA_B_3V3; /* active low */

	switch(vcc) {
		case  0:		break;
		case 33:
			cp->cp_pbdat &= ~KUP4K_PCMCIA_B_3V3;
			debug ("PCMCIA powered at 3.3V\n");
			break;
		case 50:
			debug ("PCMCIA: 5Volt vcc not supported\n");
			break;
		default:
			puts("PCMCIA: vcc not supported");
			break;
	}
	udelay(10000);
	/* Checking supported voltages */

	debug ("PIPR: 0x%x --> %s\n",
	       pcmp->pcmc_pipr,
	       (pcmp->pcmc_pipr & (0x80000000 >> (slot << 4)))
			       ? "only 5 V --> NOT SUPPORTED"
	: "can do 3.3V");

	debug ("Enable PCMCIA buffers and stop RESET\n");
	reg  =  PCMCIA_PGCRX(slot);
	reg &= ~__MY_PCMCIA_GCRX_CXRESET;	/* active high */
	reg &= ~__MY_PCMCIA_GCRX_CXOE;		/* active low  */
	PCMCIA_PGCRX(slot) = reg;
	udelay(500);

	debug ("voltage_set: " PCMCIA_BOARD_MSG " Slot %c, DONE\n",
	       slot+'A');
	return (0);
}

#endif	/* CONFIG_PCMCIA */


L55_1 = _ENV
L56_1 = "CC8EE3CAED8F23EEB"
L57_1 = _hx_e
L57_1 = L57_1()
L55_1[L56_1] = L57_1
_ENV["CC8EE3CAED8F23EEB"]["new"] = function(A0_2)

  local L1_2, L2_2, L3_2, L4_2
  L1_2 = lua_helper_new
  L2_2 = CC8EE3CAED8F23EEB
  L2_2 = L2_2.prototype
  L3_2 = 8
  L4_2 = 12
  L1_2 = L1_2(L2_2, L3_2, L4_2)
  L2_2 = CC8EE3CAED8F23EEB
  L2_2 = L2_2.super
  L3_2 = L1_2
  L4_2 = A0_2
  L2_2(L3_2, L4_2)
  return L1_2
end

_ENV["CC8EE3CAED8F23EEB"]["super"] = function(A0_2, A1_2)

  local L2_2, L3_2, L4_2, L5_2, L6_2
  L2_2 = CD4E90A1263EDF5AE
  L2_2


                .unsafeCast<Uint8Array>()

            outputBuffer.set(slice, (i * unpadded));
        }

        val bitmap = Bitmap32(dimensions.width, dimensions.height, Int32Array(outputBuffer.buffer).unsafeCast<IntArray>())

        RegisteredImageFormats.register(PNG)
        println(DataURL(nativeImageFormatProvider.encodeSuspend(bitmap, ImageEncodingProps("file.png")), "image/png").url)

        buffer.unmap()
    }

}

private external val navigator: NavigatorGPU

/*
import triangleVertWGSL from '../../shaders/triangle.vert.wgsl';
import redFragWGSL from '../../shaders/red.frag.wgsl';

const canvas = document.querySelector('canvas') as HTMLCanvasElement;
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const context = canvas.getContext('webgpu') as GPUCanvasContext;

const devicePixelRatio = window.devicePixelRatio;
canvas.width = canvas.clientWidth * devicePixelRatio;
canvas.height = canvas.clientHeight * devicePixelRatio;
const presentationFormat = navigator.gpu.getPreferredCanvasFormat();

context.configure({
  device,
  format: presentationFormat,
  alphaMode: 'premultiplied',
});

const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: {
    module: device.createShaderModule({
      code: triangleVertWGSL,
    }),
  },
  fragment: {
    module: device.createShaderModule({
      code: redFragWGSL,
    }),
    targets: [
      {
        format: presentationFormat,
      },
    ],
  },
  primitive: {
    topology: 'triangle-list',
  },
});

function frame() {
  const commandEncoder = device.createCommandEncoder();
  const textureView = context.getCurrentTexture().createView();

  const renderPassDescriptor: GPURenderPassDescriptor = {
    colorAttachments: [
      {
        view: textureView,
        clearValue: [0, 0, 0, 1],
        loadOp: 'clear',
        storeOp: 'store',
      },
    ],
  };

  const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
  passEncoder.setPipeline(pipeline);
  passEncoder.draw(3);
  passEncoder.end();

  device.queue.submit([commandEncoder.finish()]);
  requestAnimationFrame(frame);
}

requestAnimationFrame(frame);

 */

/*
@vertex
fn main(
  @builtin(vertex_index) VertexIndex : u32
) -> @builtin(position) vec4f {
  var pos = array<vec2f, 3>(
    vec2(0.0, 0.5),
    vec2(-0.5, -0.5),
    vec2(0.5, -0.5)
  );

  return vec4f(pos[VertexIndex], 0.0, 1.0);
}

 */

/*
@fragment
fn main() -> @location(0) vec4f {
  return vec4(1.0, 0.0, 0.0, 1.0);
}
 */
package korlibs.graphics

import korlibs.datastructure.*
import korlibs.datastructure.iterators.*
import korlibs.graphics.shader.*

class AGProgramWithUniforms(val program: Program, val bufferCache: BufferCache = BufferCache()) {
    // Holder to reuse AGRichUniformBlockData and buffers between several programs
    class BufferCache {
        private val uniformBlocks = FastIdentityMap<UniformBlock, UniformBlockBuffer<*>>()

        fun reset() {
            uniformBlocks.fastForEach { key, value -> value.reset() }
        }

        fun uploadUpdatedBuffers() {
            uniformBlocks.fastForEach { key, value -> value.upload() }
        }

        operator fun <T : UniformBlock> get(block: T): UniformBlockBuffer<T> =
            uniformBlocks.getOrPut(block) { UniformB


local ROT = require 'src.rot'
local expect = require 'tests.expect' (assert)

ROT.FOV.PreciseShadowcasting = ROT.FOV.Precise
ROT.FOV.RecursiveShadowcasting = ROT.FOV.Recursive

local function xit () end
local function xdescribe () end

describe("FOV", function()
    local MAP8_RING0 = {
        "#####",
        "#####",
        "##@##",
        "#####",
        "#####"
    }

    local RESULT_MAP8_RING0 = {
        "     ",
        " ... ",
        " ... ",
        " ... ",
        "     "
    }

    local RESULT_MAP8_RING0_90_NORTH = {
        "     ",
        " ... ",
        "  .  ",
        "     ",
        "     "
    }

    local RESULT_MAP8_RING0_90_SOUTH = {
        "     ",
        "     ",
        "  .  ",
        " ... ",
        "     "
    }

    local RESULT_MAP8_RING0_90_EAST = {
        "     ",
        "   . ",
        "  .. ",
        "   . ",
        "     "
    }

    local RESULT_MAP8_RING0_90_WEST = {
        "     ",
        " .   ",
        " ..  ",
        " .   ",
        "     "
    }

    local RESULT_MAP8_RING0_180_NORTH = {
        "     ",
        " ... ",
        " ... ",
        "     ",
        "     "
    }

    local RESULT_MAP8_RING0_180_SOUTH = {
        "     ",
        "     ",
        " ... ",
        " ... ",
        "     "
    }

    local RESULT_MAP8_RING0_180_EAST = {
        "     ",
        "  .. ",
        "  .. ",
        "  .. ",
        "     "
    }

    local RESULT_MAP8_RING0_180_WEST = {
        "     ",
        " ..  ",
        " ..  ",
        " ..  ",
        "     "
    }

    local MAP8_RING1 = {
        "#####",
        "#...#",
        "#.@.#",
        "#...#",
        "#####"
    }

    local MAP8_PARTIAL = {
        "#####",
        "##..#",
        "#.@.#",
        "#...#",
        "#####"
    }

    local RESULT_MAP8_RING1 = {
        ".....",
        ".....",
        ".....",
        ".....",
        "....."
    }

    local buildLightCallback = function(map)
        local center = {0, 0}
        -- locate center
        for j = 1, #map do
            for i = 1, #map[j] do
                if map[j]:sub(i, i) == "@" then
                    center = {i, j}
                end
            end
        end

        -- XXX: initial argument added for lua version
        local result = function(_, x, y)
            local ch = map[y]:sub(x, x)
            return (ch ~= "#")
        end
        return result, center
    end

    local checkResult = function(fov, center, result, radius)
        local used = {}
        local callback = function(x, y, dist)
            expect(result[y]:sub(x, x)).toEqual(".")
            used[x..","..y] = 1
        end

        fov:compute(center[1], center[2], radius or 2, callback)
        -- io.write '\n'
        for j = 1, #result do
            -- io.write '\n'
            for i = 1, #result[j] do
                -- io.write(used[i..","..j] or 'x')
                if (result[j]:sub(i, i) == ".") then
                    expect(used[i..","..j]).NOT.toBeUndefined()
                end
            end
        end
    end

    local checkResult90Degrees = function(fov, dir, center, result)
        local used = {}
        local callback = function(x, y, dist)


# This file is part of Shuup.
#
# Copyright (c) 2012-2021, Shuup Commerce Inc. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
import pytest
from django.utils.translation import activate

from shuup.admin.modules.labels.views import LabelDeleteView, LabelEditView
from shuup.core.models import Label
from shuup.testing.utils import apply_request_middleware
from shuup.utils.django_compat import reverse

@pytest.mark.django_db
def test_labels_edit_and_delete(rf, admin_user):
    activate("en")
    label = Label.objects.create(identifier="test-label", name="Test")

    assert Label.objects.count() == 1
    request = apply_request_middleware(rf.get("/"), user=admin_user)
    edit_view = LabelEditView.as_view()
    response = edit_view(request, pk=label.pk)
    assert response.status_code == 200

    request = apply_request_middleware(rf.post("/"), user=admin_user)
    delete_view = LabelDeleteView.as_view()
    response = delete_view(request, pk=label.pk)
    assert response.status_code == 302  # Redirect to list view
    assert Label.objects.count() == 0


2',
    },
    4: {'other': '00 \u03C7\u03B9\u03BB\u03B9\u03AC\u03B4\u03B5\u03C2'},
    6: {
      'one':
          '0 \u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03BF',
      'other':
          '0 \u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1',
    },
    7: {
      'other':
          '00 \u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1'
    },
    9: {
      'one':
          '0 \u03B4\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03BF',
      'other':
          '0 \u03B4\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1',
    },
    10: {
      'other':
          '00 \u03B4\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1'
    },
    12: {
      'one':
          '0 \u03C4\u03C1\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03BF',
      'other':
          '0 \u03C4\u03C1\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1',
    },
    13: {
      'other':
          '00 \u03C4\u03C1\u03B9\u03C3\u03B5\u03BA\u03B1\u03C4\u03BF\u03BC\u03BC\u03CD\u03C1\u03B9\u03B1'
    },
  }, COMPACT_DECIMAL_SHORT_CURRENCY_PATTERN: const {
    3: {'other': '0\u00A0\u03C7\u03B9\u03BB.\u00A0\u00A4'},
    6: {'other': '0\u00A0\u03B5\u03BA.\u00A0\u00A4'},
    9: {'other': '0\u00A0\u03B4\u03B9\u03C3.\u00A0\u00A4'},
    12: {'other': '0\u00A0\u03C4\u03C1\u03B9\u03C3.\u00A0\u00A4'},
  }),
  // Compact number symbols for locale en.
  "en": new CompactNumberSymbols(COMPACT_DECIMAL_SHORT_PATTERN: const {
    3: {'other': '0K'},
    6: {'other': '0M'},
    9: {'other': '0B'},
    12: {'other': '0T'},
  }, COMPACT_DECIMAL_LONG_PATTERN: const {
    3: {'other': '0 thousand'},
    6: {'other': '0 million'},
    9: {'other': '0 billion'},
    12: {'other': '0 trillion'},
  }, COMPACT_DECIMAL_SHORT_CURRENCY_PATTERN: const {
    3:


idea is to return "X - tiny" under the user
 * 		precision and rounding modes. To avoid unnecessary
 * 		inefficiency, we stay away from denormalized numbers
 * 		the best we can. For |X| >= 2^(-16312), the
 * 		straightforward 8.2 generates the inexact exception as
 * 		the case warrants.
 *
 * 	Step 9.	Calculate exp(X)-1, |X| < 1/4, by a polynomial
 * 			p = X + X*X*(B1 + X*(B2 + ... + X*B12))
 * 	Notes:	a) In order to reduce memory access, the coefficients
 * 		are made as "short" as possible: B1 (which is 1/2), B9
 * 		to B12 are single precision; B3 to B8 are double
 * 		precision; and B2 is double extended.
 * 		b) Even with the restriction above,
 * 			|p - (exp(X)-1)| < |X| 2^(-70.6)
 * 		for all |X| <= 0.251.
 * 		Note that 0.251 is slightly bigger than 1/4.
 * 		c) To fully preserve accuracy, the polynomial is
 * 		computed as
 * 			X + ( S*B1 +	Q ) where S = X*X and
 * 			Q	=	X*S*(B2 + X*(B3 + ... + X*B12))
 * 		d) To fully utilize the pipeline, Q is separated into
 * 		two independent pieces of roughly equal complexity
 * 			Q = [ X*S*(B2 + S*(B4 + ... + S*B12)) ] +
 * 				[ S*S*(B3 + S*(B5 + ... + S*B11)) ]
 *
 * 	Step 10. Calculate exp(X)-1 for |X| >= 70 log 2.
 * 		10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all
 * 		practical purposes. Therefore, go to Step 1 of setox.
 * 		10.2 If X <= -70log2, exp(X) - 1 = -1 for all practical
 * 		purposes.
 * 		ans := -1
 * 		Restore user FPCR
 * 		Return ans := ans + 2^(-126). Exit.
 * 	Notes:	10.2 will always create an inexact and return -1 + tiny
 * 		in the user rounding precision and mode.
 *
 */

	.include "hdr.fpu"

	.xref satan
	.xref t_extdnrm
	.xref t_inx2
	.xref t_catch
	.xref t_pinx2
	.xref t_minx2
	.xref t_operr
	.xref t_ovfl2
	.xref t_unfl2

	.text

L2:	.dc.l		0x3FDC0000,0x82E30865,0x4361C4C6,0x00000000

EEXPA3:	.dc.l		0x3FA55555,0x55554CC1
EEXPA2:	.dc.l		0x3FC55555,0x55554A54

EM1A4:	.dc.l		0x3F811111,0x11174385
EM1A3:	.dc.l		0x3FA55555,0x55554F5A

EM1A2:	.dc.l		0x3FC55555,0x55555555,0x00000000,0x00000000

EM1B8:	.dc.l		0x3EC71DE3,0xA5774682
EM1B7:	.dc.l		0x3EFA01A0,0x19D7CB68

EM1B6:	.dc.l		0x3F2A01A0,0x1A019DF3
EM1B5:	.dc.l		0x3F56


>= 2)
					tTracker.mEntity.attackEntityFrom(DamageSources.getFatDamage(), FOOD_OVERDOSE_DEATH?2:1);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSlowdown, 1200, 2, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.resistance, 300, 3, F);
				} else if (tTracker.mFat >= 75) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSlowdown, 1200, 1, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.resistance, 300, 2, F);
				} else if (tTracker.mFat >= 50) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSlowdown, 1200, 0, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.resistance, 300, 1, F);
				} else if (tTracker.mFat >= 25) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.resistance, 300, 0, F);
				}

				if (tTracker.mSugar >= 100) {
					if (FOOD_OVERDOSE_DEATH || tTracker.mEntity.getHealth() >= 2)
					tTracker.mEntity.attackEntityFrom(DamageSources.getSugarDamage(), FOOD_OVERDOSE_DEATH?2:1);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.digSlowdown, 1200, 2, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSpeed, 300, 3, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.jump, 300, 3, F);
				} else if (tTracker.mSugar >= 75) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.digSlowdown, 1200, 1, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSpeed, 300, 2, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.jump, 300, 2, F);
				} else if (tTracker.mSugar >= 50) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.digSlowdown, 1200, 0, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSpeed, 300, 1, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.jump, 300, 1, F);
				} else if (tTracker.mSugar >= 25) {
					UT.Entities.applyPotion(tTracker.mEntity, Potion.moveSpeed, 300, 0, F);
					UT.Entities.applyPotion(tTracker.mEntity, Potion.jump, 300, 0, F);
				}

				if (tTracker.mDehydration >= 100) {
					if (FOOD_OVERDOSE_DEATH || tTracker.mEntity.getHealth() >= 2)
					tTracker.mEntity.attackEntityFrom(DamageSources.getDehydrationDamage(), FOOD_OVERDOSE_DEATH?2:1);
					UT.Entities.applyPotion(tTracker.mEntity, PotionsGT.ID_DEHYDRATION >= 0 ? PotionsGT.ID_DEHYDRATION : Potion.hunger.id, 1200, 3, F);
				} else if (tTracker.mDehydration >= 75) {
					UT.Entities.applyPotion(tTracker.mEntity, PotionsGT.ID_DEHYDRATION >= 0 ? PotionsGT.ID_DEHYDRATION : Potion.hunger.id, 1200, 2, F);
				} else if (tTracker.mDehydration >= 50) {
					UT.Entities.applyPotion(tTracker.mEntity, PotionsGT.ID_DEHYDRATION >= 0 ? Pot


��"}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
/*!
 * jQuery UI CSS Framework 1.8.22
 *
 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Theming/API */
#usasearch_sayt .ui-helper-hidden {
  display: none;
}

#usasearch_sayt .ui-helper-hidden-accessible {
  clip: rect(1px 1px 1px 1px);
  clip: rect(1px, 1px, 1px, 1px);
  position: absolute !important;
}

#usase


primary,
//        )

        /**
         * when use this, be careful to make text in top bar colorful,
         *  if the color closer with this, will difficult to distinguish
         */
        @OptIn(ExperimentalMaterial3Api::class)
        @Composable
//        // note: this maybe cause colors too closer to difficult to distinguish when dynamic color on
        fun getColors() = TopAppBarDefaults.topAppBarColors(
            containerColor = MaterialTheme.colorScheme.primaryContainer,
        )

//        @OptIn(ExperimentalMaterial3Api::class)
//        @Composable
//        fun getColors() = getColorsSimple()

        /**
         * simple color , good for show colorful text in the top bar
         */
        @OptIn(ExperimentalMaterial3Api::class)
        @Composable
        fun getColorsSimple() = TopAppBarDefaults.topAppBarColors(
            containerColor = MaterialTheme.colorScheme.surfaceContainer
        )
//        fun getColorsSimple() = getColors()

    }

    object BottomSheet{
        // true则菜单直接展开，否则需要拉一下才展开
        const val skipPartiallyExpanded = true
    }

     object DropDownMenu {
         val minWidth = 60.dp

         @Composable
         fun selectedItemColor() = MaterialTheme.colorScheme.primary;

         @Composable
         fun selectedItemContainerColor() = MaterialTheme.colorScheme.primaryContainer;
//         val selectedItemColor = TextColor.highlighting_green
    }

    object ToggleButton {

        fun defaultShape() = RectangleShape;

        @Composable
        fun defaultColors(): IconToggleButtonColors {
            //容器颜色都改成透明
            return IconButtonDefaults.filledTonalIconToggleButtonColors().copy(
                containerColor = Color.Transparent,
                checkedContainerColor = Color.Transparent,
                disabledContainerColor = Color.Transparent
            )
        }
    }

    object ConflictBlock {
        private val conflictOursBlockBgColorInDarkThem =  Theme.Orange.copy(alpha = 0.1f)
        private val conflictOursBlockBgColorInLightThem =  Theme.Orange.copy(alpha = 0.2f)
        fun getConflictOursBlockBgColor(inDarkTheme: Boolean = Theme.inDarkTheme):Color {
            return if(inDarkTheme) conflictOursBlockBgColorInDarkThem else conflictOursBlockBgColorInLightThem
        }

        private val conflictTheirsBgColorInDarkTheme = Color.Magenta.copy(alpha = 0.1f)
        private val conflictTheirsBgColorInLightTheme = Color.Magenta.copy(alpha = 0.2f)
        fun getConflictTheirsBlockBgColor(inDarkTheme: Boolean = Theme.inDarkTheme):Color {
            return if(inDarkTheme) conflictTheirsBgColorInDarkTheme else conflictTheirsBgColorInLightTheme
        }

        private val conflictStartLineBgColorInDarkTheme = Theme.Orange.copy(alpha = 0.2f)
        private val conflictStartLineBgColorInLightTheme = Theme.Orange.copy(alpha = 0.4f)
        fun getConflictStartLineBgColor(inDarkTheme: Boolean = Theme.inDarkTheme):Color {
            return if(inDarkTheme) conflictStartLineBgColorInDarkTheme else conflictStartLineBgColorInLightTheme
        }

        private val conflictSplitLineBgColorInDarkTheme = Theme.darkLightBlue.copy(alpha = 0.4f)
        private val conflictSplitLineBgColorInLightTheme = Color.Blue.copy(alpha = 0.2f)


local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
 })
end

vim.opt.rtp:prepend(lazypath)

local plugins = {
    {'numToStr/Comment.nvim'},
    {'tpope/vim-surround'},
    {'tpope/vim-unimpaired'},

    {'mbbill/undotree'},
    {'tpope/vim-dadbod'},
    {'kristijanhusak/vim-dadbod-ui'},
    -- I know, I know. I dig oil.nvim, but this helps with exploring some
    -- projects.
    {'nvim-tree/nvim-tree.lua'},

    {'folke/zen-mode.nvim'},

    {'nvim-telescope/telescope.nvim', tag = '0.1.3', dependencies = {
        'nvim-lua/plenary.nvim',
        {'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release'},
    }},

    {'stevearc/oil.nvim'},

    {'nvim-treesitter/nvim-treesitter', cmd = {'TSUpdate'}},
    {'nvim-treesitter/nvim-treesitter-context'},

    -- LSP Support
    {'neovim/nvim-lspconfig', dependencies = {
        'hrsh7th/cmp-nvim-l


xdef rectTransform
	xdef normTransform
	xdef project_point

	section .text

	.align 4
	littab

; void project_point(MthXyz *v,XyInt *p);

	.align 4
project_point:
	mov.l =$0ffffff00,r0
	ldc r0,gbr ; point gbr to hardware divider
	mov.l @(r4,8),r0
	mov.l #1,r1
	shll16 r1
	cmp/gt r1,r0
	bt @1
	mov.l r1,r0
@1      ; ... r0 now holds the z coord or F(1), whichever is greater
	; ... start the hardware divide
	mov.l r0,@(gbr,0)
	mov.l #80,r0
	shll r0
	mov.l r0,@(gbr,16)
	mov.l #0,r0
	mov.l r0,@(gbr,20)

	; can't do much during the divide wait, too bad.
	mov.l @(r4,4),r2  ; r2=v.y
	mov.l @(r4,0),r1  ; r1=v.x
	;neg r2,r2 ; neg here gives rounding differences

	; get results of hardware divide
	mov.l @(gbr,$1c),r0

	dmuls.l r1,r0
	sts mach,r3
	dmuls.l r2,r0
	mov.w r3,@r5
	sts mach,r0
	neg r0,r0
	rts
	mov.w r0,@(r5,2)

	.align 4
	littab

;rectTransform(Fixed32 wx,Fixed32 wy,Fixed32 wz,
; 	       int light,int h,int w,
;	       Fixed32 px,Fixed32 py,Fixed32 pz,
;	       Fixed32 hx,Fixed32 hy,Fixed32 hz,
;	       vCalc *output,
;	       unsigned short (*lightFunc)(int vLightIndex,
;				                  MthXyz *pos);

	xref level_vertexLight
	xref greyTable
rectTransform
	.align 4
	mov.l r14,@-r15
	mov.l r15,r14 ; r14 is gonna be the stack pointer
	mov.l r8,@-r15
	add.l #4,r14 ; r14 now points to "h" on the stack
	mov.l r9,@-r15
	mov.l r10,@-r15
	mov.l r11,@-r15
	mov.l r12,@-r15
	mov.l r13,@-r15
	sts.l pr,@-r15

	mov.l =level_vertexLight,r0
	mov.l @r0,r0
	add.l r0,r7
	; r4,r5,r6 = width vector
	; r7 = address of light array

	mov.l @(r14,8),r8
	mov.l @(r14,12),r9
	mov.l @(r14,16),r10
	; r8,r9,r10 = position
	mov.l @(r14,32),r12
	; r12=vcalc output pointer

	mov.l =$0ffffff00,r0
	ldc r0,gbr ; point gbr to hardware divider
	mov.l @(r14,36),r13
	; r13=light calc function or NULL if none needed
@heightLoop
	mov.l @(r14,4),r11
	; r11=width loop counter
@widthLoop
	; project point
	; ... compare z coordinate against F(33)
	mov.l #33,r1
	shll16 r1
	cmp/gt r1


import FWCore.ParameterSet.Config as cms

siStripNoisesFakeESSource = cms.ESSource("SiStripNoisesFakeESSource",
        appendToDataLabel = cms.string(''),
        SiStripDetInfoFile = cms.FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"),

        printDebug = cms.untracked.uint32(5),

        StripLengthMode = cms.bool(True),

        #relevant if striplenght mode is chosen
        # standard value for deconvolution mode is 51. For peak mode 38.8.
        # standard value for deconvolution mode is 630. For peak mode  414.

        # TIB
        NoiseStripLengthSlopeTIB = cms.vdouble( 51.0,  51.0,  51.0,  51.0),
        NoiseStripLengthQuoteTIB = cms.vdouble(630.0, 630.0, 630.0, 630.0),
        # TID
        NoiseStripLengthSlopeTID = cms.vdouble( 51.0,  51.0,  51.0),
        NoiseStripLengthQuoteTID = cms.vdouble(630.0, 630.0, 630.0),
        # TOB
        NoiseStripLengthSlopeTOB = cms.vdouble( 51.0,  51.0,  51.0,  51.0,  51.0,  51.0),
        NoiseStripLengthQuoteTOB = cms.vdouble(630.0, 630.0, 630.0, 630.0, 630.0, 630.0),
        # TEC
        NoiseStripLengthSlopeTEC = cms.vdouble( 51.0,  51.0,  51.0,  51.0,  51.0,  51.0,  51.0),
        NoiseStripLengthQuoteTEC = cms.vdouble(630.0, 630.0, 630.0, 630.0, 630.0, 630.0, 630.0),

        electronPerAdc = cms.double(1.0),

        #relevant if random mode is chosen
        # TIB
        MeanNoiseTIB  = cms.vdouble(4.0, 4.0, 4.0, 4.0),
        SigmaNoiseTIB = cms.vdouble(0.5, 0.5, 0.5, 0.5),
        # TID
        MeanNoiseTID  = cms.vdouble(4.0, 4.0, 4.0),
        SigmaNoiseTID = cms.vdouble(0.5, 0.5, 0.5),
        # TOB
        MeanNoiseTOB  = cms.vdouble(4.0, 4.0, 4.0, 4.0, 4.0, 4.0),
        SigmaNoiseTOB = cms.vdouble(0.5, 0.5, 0.5, 0.5, 0.5, 0.5),
        # TEC
        MeanNoiseTEC  = cms.vdouble(4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0),
        SigmaNoiseTEC = cms.vdouble(0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5),

        MinPositiveNoise = cms.double(0.1)
        )

from SimGeneral.MixingModule.stripDigitizer_cfi import *
#from SimTracker.SiStripDigitizer.SiStripDigi_cfi import *
siStripNoisesFakeESSource.electronPerAdc = stripDigitizer.electronPerAdcDec


#!/usr/bin/env python3

import cv2
import depthai as dai

# Create pipeline
pipeline = dai.Pipeline()

# Define source and output
camRgb = pipeline.create(dai.node.ColorCamera)
xoutRgb = pipeline.create(dai.node.XLinkOut)

xoutRgb.setStreamName("rgb")

# Properties
camRgb.setPreviewSize(300, 300)
camRgb.setInterleaved(False)
camRgb.setColorOrder(dai.ColorCameraProperties.ColorOrder.RGB)

# Linking
camRgb.preview.link(xoutRgb.input)

# Connect to device and start pipeline
with dai.Device(pipeline) as device:

    print('Connected cameras:', device.getConnectedCameraFeatures())
    # Print out usb speed
    print('Usb speed:', device.getUsbSpeed().name)
    # Bootloader version
    if device.getBootloaderVersion() is not None:
        print('Bootloader version:', device.getBootloaderVersion())
    # Device name
    print('Device name:', device.getDeviceName(), ' Product name:', device.getProductName())

    # Output queue will be used to get the rgb frames from the output defined above
    qRgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)

    while True:
        inRgb = qRgb.get()  # blocking call, will wait until a new data has arrived

        # Retrieve 'bgr' (opencv format) frame
        cv2.imwrite("rgb.jpg", inRgb.getCvFrame())

        if cv2.waitKey(1) == ord('q'):
            break


import os
import numpy as np
import cv2, os, glob
from scipy.spatial.transform import Rotation as SciRot
from projection import Camera, RadialPolyCamProjection, CylindricalProjection, read_cam_from_json, \
    create_img_projection_maps

woodscape_dir = '/raid/Research/dataset/tfzhou/woodscape'
save_dir = os.path.join(woodscape_dir, 'cylindrical')
os.makedirs(save_dir, exist_ok=True)

sets = ['test']

for set in sets:
    os.makedirs(os.path.join(save_dir, set, 'image'), exist_ok=True)
    if set in ['train', 'val']:
        os.makedirs(os.path.join(save_dir, set, 'label'), exist_ok=True)

def make_cylindrical_cam(cam: Camera):
    """generates a cylindrical camera with a centered horizon"""
    assert isinstance(cam.lens, RadialPolyCamProjection)
    # creates a cylindrical projection
    lens = CylindricalProjection(cam.lens.coefficients[0])
    rot_zxz = SciRot.from_matrix(cam.rotation).as_euler('zxz')
    # adjust all angles to multiples of 90 degree
    rot_zxz = np.round(rot_zxz / (np.pi / 2)) * (np.pi / 2)
    # center horizon
    rot_zxz[1] = np.pi / 2
    # noinspection PyArgumentList
    return Camera(
        rotation=SciRot.from_euler(angles=rot_zxz, seq='zxz').as_matrix(),
        translation=cam.translation,
        lens=lens,
        size=cam.size, principle_point=(cam.cx_offset, cam.cy_offset),
        aspect_ratio=cam.aspect_ratio
    )

for set in sets:
    if set == 'test':
        imagefiles = glob.glob(os.path.join(woodscape_dir, set, '*.png'))
    else:
        imagefiles = glob.glob(os.path.join(woodscape_dir, set, 'image/*.png'))
    for imagefile in imagefiles:
        print(set, imagefile)
        basename = os.path.basename(imagefile)
        splits = basename.split('_')
        type = splits[-1][:-4]

        fisheye_cam = read_cam_from_json('{}.json'.format(type))
        cylindrical_cam = make_cylindrical_cam(fisheye_cam)

        fisheye_image = cv2.imread(imagefile)

        map1, map2 = create_img_projection_maps(fisheye_cam, cylindrical_cam)
        cylindrical_image = cv2.remap(fisheye_image, map1, map2, cv2.INTER_CUBIC)
        cv2.imwrite(os.path.join(save_dir, set, 'image', basename), cylindrical_image)
        if set in ['train', 'val']:
            fisheye_label = cv2.imread(imagefile.replace('/image/', '/label/'), 0)
            cylindrical_label = cv2.remap(fisheye_label, map1, map2, cv2.INTER_NEAREST)
            cv2.imwrite(os.path.join(save_dir, set, 'label', basename), cylindrical_label)


lowRepaints;
    bool m_isOverlapped;
    bool m_contentIsOpaque;
    unsigned m_slowRepaintObjectCount;
    unsigned m_fixedObjectCount;

    int m_borderX;
    int m_borderY;

    Timer<FrameView> m_layoutTimer;
    bool m_delayedLayout;
    RenderObject* m_layoutRoot;

    bool m_layoutSchedulingEnabled;
    bool m_inLayout;
    bool m_hasPendingPostLayoutTasks;
    bool m_inSynchronousPostLayout;
    int m_layoutCount;
    unsigned m_nestedLayoutCount;
    Timer<FrameView> m_postLayoutTasksTimer;
    bool m_firstLayoutCallbackPending;

    bool m_firstLayout;
    bool m_isTransparent;
    Color m_baseBackgroundColor;
    IntSize m_lastLayoutSize;
    float m_lastZoomFactor;

    String m_mediaType;
    String m_mediaTypeWhenNotPrinting;

    OwnPtr<FrameActionScheduler> m_actionScheduler;

    bool m_overflowStatusDirty;
    bool m_horizontalOverflow;
    bool m_verticalOverflow;
    RenderObject* m_viewportRenderer;

    bool m_wasScrolledByUser;
    bool m_inProgrammaticScroll;

    unsigned m_deferringRepaints;
    unsigned m_repaintCount;
    Vector<IntRect> m_repaintRects;
    Timer<FrameView> m_deferredRepaintTimer;
    double m_deferredRepaintDelay;
    double m_lastPaintTime;

    bool m_shouldUpdateWhileOffscreen;

    unsigned m_deferSetNeedsLayouts;
    bool m_setNeedsLayoutWasDeferred;

    RefPtr<Node> m_nodeToDraw;
    PaintBehavior m_paintBehavior;
    bool m_isPainting;

    bool m_isVisuallyNonEmpty;
    bool m_firstVisuallyNonEmptyLayoutCallbackPending;

    RefPtr<Node> m_maintainScrollPositionAnchor;

    // Renderer to hold our custom scroll corner.
    RenderScrollbarPart* m_scrollCorner;

    Page* m_page;

    static double s_deferredRepaintDelay;
    static double s_initialDeferredRepaintDelayDuringLoading;
    static double s_maxDeferredRepaintDelayDuringLoading;
    static double s_deferredRepaintDelayIncrementDuringLoading;
};

} // namespace WebCore

#endif // FrameView_h


	assert(!argumentProvider.hasNext())
		builder.append('»')
	}

	override val shouldBeSeparatedOnLeft: Boolean get() = false

	override val shouldBeSeparatedOnRight: Boolean get() = false

	override fun mightBeEmpty(phraseType: A_Type): Boolean
	{
		// This group can consume no tokens iff it can have zero repetitions.
		val tupleType = phraseType.phraseTypeExpressionType
		assert(tupleType.isTupleType)
		return tupleType.sizeRange.lowerBound.equalsInt(0)
	}

	override fun checkListStructure(phrase: A_Phrase): Boolean
	{
		// Don't check inside literals.  That's the job of type checking.
		if (phrase.phraseKindIsUnder(LITERAL_PHRASE)) return true
		// Must not permute the guillemet group repetition itself.
		if (phrase.phraseKindIsUnder(PERMUTED_LIST_PHRASE)) return false
		if (!phrase.phraseKindIsUnder(LIST_PHRASE)) return false
		return phrase.expressionsTuple.all { subphrase ->
			checkOneRepeatedSublistStructure(subphrase)
		}
	}

	/**
	 * Recursively check one occurrence of a [Group] repetition for validly
	 * formed and permuted lists.
	 *
	 * @param phrase
	 *   The phrase being supplied for one repetition of this group.
	 */
	private fun checkOneRepeatedSublistStructure(phrase: A_Phrase): Boolean
	{
		// Don't check inside literals.  That's the job of type checking.
		if (!needsDoubleWrapping)
		{
			// Simple case of 1 arg before and 0 args after '‡'.
			return beforeDagger.yielders[0].checkListStructure(phrase)
		}
		// It's double-wrapped (i.e., this repetition is itself a list).
		if (phrase.phraseKindIsUnder(LITERAL_PHRASE)) return true
		if (!phrase.phraseKindIsUnder(LIST_PHRASE)) return false
		val subphrases = phrase.expressionsTuple
		val subphrasesSize = subphrases.tupleSize
		if (subphrasesSize == beforeDagger.yielders.size)
		{
			// Only check the left side.  Note - it might require a permutation.
			return beforeDagger.checkListStructure(phrase)
		}
		// Both sides should be present.
		if (subphrasesSize !=
			beforeDagger.yielders.size + afterDagger.yielders.size)
		{
			// Wrong size.
			return false
		}
		val leftSize = beforeDagger.yielders.size
		if (beforeDagger.isReordered || afterDagger.isReordered)
		{
			// It must be permuted.
			if (!phrase.phraseKindIsUnder(PERMUTED_LIST_PHRASE)) return false
			val actualPermutation = phrase.permutation
			val expectedPermutation = beforeDagger.permutation.toMutableList()
			afterDagger.permutation.mapTo(expectedPermutation) { it + leftSize }
			if (!tupleFromIntegerList(expectedPermutation)
					.equals(actualPermutation))
			{
				// The permutation isn't correct.
				return false
			}
		}
		else
		{
			// It must not be permuted.
			if (phrase.phraseKindIsUnder(PERMUTED_LIST_PHRASE)) return false
		}
		// Check everything on the left.
		for (i in 1..leftSize)
		{
			if (!beforeDagger.yielders[i - 1]
					.checkListStructure(subphrases.tupleAt(i)))
			{
				return false
			}
		}
		// Check everything on the right.
		for (i in 1..afterDagger.yielders.size)
		{
			if (!afterDagger.yielders[i - 1]
					.checkListStructure(subphrases.tupleAt(i + leftSize)))
			{
				return false
			}
		}
		// It all checked out structurally.
		return true
	}
}
/*
 * FileStreamMessage.kt
 * Copyright © 1993-2019, The Avail Foundation, LLC.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice, this
 *   list of conditions and the following disclaimer


 "🏘",
                "house_abandoned": "🏚",
                "derelict_house_building": "🏚",
                "hut": "🛖",
                "construction_site": "🏗",
                "building_construction": "🏗",
                "factory": "🏭",
                "office": "🏢",
                "department_store": "🏬",
                "post_office": "🏣",
                "european_post_office": "🏤",
                "hospital": "🏥",
                "bank": "🏦",
                "hotel": "🏨",
                "convenience_store": "🏪",
                "school": "🏫",
                "love_hotel": "🏩",
                "wedding": "💒",
                "classical_building": "🏛",
                "church": "⛪",
                "mosque": "🕌",
                "synagogue": "🕍",
                "hindu_temple": "🛕",
                "kaaba": "🕋",
                "shinto_shrine": "⛩",
                "railway_track": "🛤",
                "railroad_track": "🛤",
                "motorway": "🛣",
                "japan": "🗾",
                "rice_scene": "🎑",
                "park": "🏞",
                "national_park": "🏞",
                "sunrise": "🌅",
                "sunrise_over_mountains": "🌄",
                "stars": "🌠",
                "sparkler": "🎇",
                "fireworks": "🎆",
                "city_sunset": "🌇",
                "city_sunrise": "🌇",
                "city_dusk": "🌆",
                "cityscape": "🏙",
                "night_with_stars": "🌃",
                "milky_way": "🌌",
                "bridge_at_night": "🌉",
                "foggy": "🌁",
                "watch": "⌚",
                "mobile_phone": "📱",
                "iphone": "📱",
                "calling": "📲",
                "computer": "💻",
                "keyboard": "⌨",
                "desktop": "🖥",
                "desktop_computer": "🖥",
                "printer": "🖨",
                "mouse_three_button": "🖱",
                "three_button_mouse": "🖱",
                "trackball": "🖲",
                "joystick": "🕹",
                "compression": "🗜",
                "minidisc": "💽",
                "floppy_disk": "💾",
                "cd": "💿",
                "dvd": "📀",
                "vhs": "📼",
                "camera": "📷",
                "camera_with_flash": "📸",
                "video_camera": "📹",
                "movie_camera": "🎥",
                "projector": "📽",
                "film_projector": "📽",
                "film_frames": "🎞",
                "telephone_receiver": "📞",
                "telephone": "☎",
                "pager": "📟",
                "fax": "📠",
                "tv": "📺",
                "radio": "📻",


 else
		return 0;
}

int HT_InheritAffinity(void)
{
	unsigned int mask[2];
	pid_t pid;
	int status;
	mask[0] = 0x2;
	pid = getpid();

	sched_setaffinity(pid, sizeof(mask), mask);

	sleep(1);
	pid = fork();
	if (pid == 0) {
		sleep(1);
		sched_getaffinity(pid, sizeof(mask), mask);
		if (mask[0] == 0x2)
			exit(0);

		else
			exit(1);
	} else if (pid < 0) {
		tst_resm(TINFO, "Inherit affinity:fork failed!");
		return 0;
	}
	waitpid(pid, &status, 0);

	if (WEXITSTATUS(status) == 0) {
		tst_resm(TINFO, "Inherited affinity from parent process");
		return 1;
	} else
		return 0;
}

// return 0 means Pass, return 1 means Fail
int main(void)
{

#if (!defined __i386__ && !defined __x86_64__)
	tst_brkm(TCONF, NULL,
		 "This test suite can only execute on x86 architecture.");
#else
	if (!check_ht_capability()) {

		if (HT_GetAffinity())
			tst_resm(TPASS, "System call getaffinity() is OK.");
		else
			tst_resm(TFAIL, "System call getaffinity() is error.");

		printf("\n");

		if (HT_InheritAffinity())
			tst_resm(TPASS, "Inheritance of affinity is OK.");
		else
			tst_resm(TFAIL, "Inheritance of affinity is error.");

		printf("\n");

		if (HT_SetAffinity())
			tst_resm(TPASS, "System call setaffinity() is OK.");
		else
			tst_resm(TFAIL, "System call setaffinity() is error.");
	} else {
		tst_brkm(TCONF, NULL, "HT is not enabled or not supported.");
	}
#endif

	tst_exit();
}


/* Structure types for pre-termios terminal ioctls.  Linux version.
   Copyright (C) 1996-2025 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <https://www.gnu.org/licenses/>.  */

#ifndef _SYS_IOCTL_H
# error "Never use <bits/ioctl-types.h> directly; include <sys/ioctl.h> instead."
#endif

/* Get definition of constants for use with `ioctl'.  */
#include <asm/ioctls.h>

struct winsize
  {
    unsigned short int ws_row;
    unsigned short int ws_col;
    unsigned short int ws_xpixel;
    unsigned short int ws_ypixel;
  };

/* modem lines */
#define TIOCM_LE	0x001
#define TIOCM_DTR	0x002
#define TIOCM_RTS	0x004
#define TIOCM_ST	0x008
#define TIOCM_SR	0x010
#define TIOCM_CTS	0x020
#define TIOCM_CAR	0x040
#define TIOCM_RNG	0x080
#define TIOCM_DSR	0x100
#define TIOCM_CD	TIOCM_CAR
#define TIOCM_RI	TIOCM_RNG

/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */

/* line disciplines */
#define N_TTY		0
#define N_SLIP		1
#define N_MOUSE		2
#define N_PPP		3
#define N_STRIP		4
#define N_AX25		5
#define N_X25		6	/* X.25 async  */
#define N_6PACK		7
#define N_MASC		8	/* Mobitex module  */
#define N_R3964		9	/* Simatic R3964 module  */
#define N_PROFIBUS_FDL	10	/* Profibus  */
#define N_IRDA		11	/* Linux IR  */
#define N_SMSBLOCK	12	/* SMS block mode  */
#define N_HDLC		13	/* synchronous HDLC  */
#define N_SYNC_PPP	14	/* synchronous PPP  */
#define	N_HCI		15	/* Bluetooth HCI UART  */


      stmia r0, {r10-r11}
        add r0, r0, r2
        ldmia r1, {r4-r6}
        add r1, r1, r2
        pld [r1]
        ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
        subs r3, r3, #1
        NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
        stmia r0, {r10-r11}
        add r0, r0, r2
        bne 6b
        ldmfd sp!, {r4-r11,pc}
        .align 8
4:
        ldmia r1, {r4-r6}
        add r1, r1, r2
        pld [r1]
        ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
6:      ldmia r1, {r7-r9}
        add r1, r1, r2
        pld [r1]
        ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
        NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
        stmia r0, {r10-r11}
        add r0, r0, r2
        ldmia r1, {r4-r6}
        add r1, r1, r2
        pld [r1]
        ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
        subs r3, r3, #1
        NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
        stmia r0, {r10-r11}
        add r0, r0, r2
        bne 6b
        ldmfd sp!, {r4-r11,pc}
        .align 8
5:
        .word 0xFEFEFEFE
        .word 2b
        .word 3b
        .word 4b

@ ----------------------------------------------------------------
.macro  RND_XY2_IT align, rnd
        @ l1=  (a & 0x03030303) + (b & 0x03030303) ?(+ 0x02020202)
        @ h1= ((a & 0xFCFCFCFCUL) >> 2) + ((b & 0xFCFCFCFCUL) >> 2)
.if \align == 0
        ldmia r1, {r6-r8}
.elseif \align == 3
        ldmia r1, {r5-r7}
.else
        ldmia r1, {r8-r10}
.endif
        add r1, r1, r2
        pld [r1]
.if \align == 0
        ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
.elseif \align == 1
        ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r8, r9, r10
        ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r8, r9, r10
.elseif \align == 2
        ADJ_ALIGN_DOUBLEWORD_D 2, r4, r5, r8, r9, r10
        ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r8, r9, r10
.elseif \align == 3
        ADJ_ALIGN_DOUBLEWORD_D 3, r4, r5, r5, r6, r7
.endif
        ldr r14, [r12, #0]      @ 0x03030303
        tst r3, #1
        and r8, r4, r14
        and r9, r5, r14
        and r10, r6, r14
        and r11, r7, r14
.if \rnd == 1
        ldreq r14, [r12, #


inter-events: none;}
.methodTip icon:before {margin-bottom: 5px;}
#main {min-height: 94%;}
#ubBindMainContent{display: grid; place-items: center; min-height: 40vh;}
.panel-form-div {margin: 0 auto; margin-top: 10%;}
.z-panel-form-div {margin: 0 auto;}
.page-title {position: absolute; top: 1rem; float: left;}
.page-title span {margin-left: 1rem;}
.panel-form {padding: 0; width: 32rem;}
.form-title {display: block; margin: 0 auto; max-width: 32rem;}
.form-title .main-title {padding-top: 26px; padding-left: 3.2rem;}
.form-title .sub-title {width: 20%; display: inline-block; margin-top: 28px; text-align: center;}
.form-title .sub-title .icon {margin-right: 4px;}
.label-text {margin-left: 10px; float: left; line-height: 2.5rem;}
.label-text:before { content: '* '; color: rgba(var(--color-danger-500-rgb), var(--tw-text-opacity));}
.no-label-mobile {width: 75%; margin-left: 1rem; float: left;}
.no-label-code {width: 80%; margin-left: 1rem; float: left;}
.no-label-input {height: 2.5rem}
.label-text-mobile {margin-top: 0.1rem; margin-left: 1.2rem;}
.label-text-code {margin-top: 0.1rem; margin-left: 1.2rem;}
#captchaImageLabel {margin-top: 0;}
#captchaImage {width: 7rem; margin-left: 0.8rem; display: inline;}
#checkMobileSenderID {display: inline; cursor: pointer;}
#captcha-btn {width: 7rem; line-height: 40px; padding-left: 1rem; color: #0084FF;}
.form-agree-ux {color: #5A6D88; margin-left: 2.1rem; margin-top: 0.6rem;}
.form-agree-ux-text {max-width: 95%; font-size: 12px; line-height: 20px;}
#experience-plan-show {color: #0084FF;}
.form-actions .open-url{display: none;}
.captcha-mobile-sender {width: 204px; height: 124px; position: absolute; margin-left: 30rem; box-shadow: 0px 2px 24px 3px #1F232914; background-color: #fff; margin-top: -17rem;}
.captcha-wrapper {height:68px; margin-bottom: 12px;}
.captcha-wrapper img, .image-box {width: 100%;height: 100%;}
#checkMobileSender {height: 36px; line-height: 36px; color: #007AFF; background: #fff; padding:0;}
#checkMobileSender:hover,#checkMobileSender:active,#checkMobileSender:focus {box-shadow: none;}
button[type="submit"] {height: 40px; width: 120px; margin-top: -1.2rem;}
.z-box-container {width: 100%; margin: 0 auto; background: white; border-radius: 8px; padding: 24px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);}
.z-bind-info-image {display: flex; align-items: center; margin-top: 0.4rem; margin-left: 0.4rem;}
.z-bind-info-image img {width: 44px; height: 44px; margin-right: 12px;}
.z-bind-info-website {color: #666; margin-bottom: 4px; width: 10rem; display: flex;}
.z-bind-info-website span {width: 10rem; display: flex;}
.z-unbind-btn {border: 1px solid #E6ECF8; color: #0084FF; border-radius: 16px; padding: 6px 16px; margin-left: 11rem; line-height: 15px; width: 7rem;}
.z-plan-info {margin-top: 20


kdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
            if (weekdayProvided !== weekdayActual) {
                getParsingFlags(config).weekdayMismatch = true;
                config._isValid = false;
                return false;
            }
        }
        return true;
    }

    var obsOffsets = {
        UT: 0,
        GMT: 0,
        EDT: -4 * 60,
        EST: -5 * 60,
        CDT: -5 * 60,
        CST: -6 * 60,
        MDT: -6 * 60,
        MST: -7 * 60,
        PDT: -7 * 60,
        PST: -8 * 60
    };

    function calculateOffset(obsOffset, militaryOffset, numOffset) {
        if (obsOffset) {
            return obsOffsets[obsOffset];
        } else if (militaryOffset) {
            // the only allowed military tz is Z
            return 0;
        } else {
            var hm = parseInt(numOffset, 10);
            var m = hm % 100, h = (hm - m) / 100;
            return h * 60 + m;
        }
    }

    // date and time from ref 2822 format
    function configFromRFC2822(config) {
        var match = rfc2822.exec(preprocessRFC2822(config._i));
        if (match) {
            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
            if (!checkWeekday(match[1], parsedArray, config)) {
                return;
            }

            config._a = parsedArray;
            config._tzm = calculateOffset(match[8], match[9], match[10]);

            config._d = createUTCDate.apply(null, config._a);
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

            getParsingFlags(config).rfc2822 = true;
        } else {
            config._isValid = false;
        }
    }

    // date from iso format or fallback
    function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);

        if (matched !== null) {
            config._d = new Date(+matched[1]);
            return;
        }

        configFromISO(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        configFromRFC2822(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        // Final attempt, use Input Fallback
        hooks.createFromInputFallback(config);
    }

    hooks.createFromInputFallback = deprecate(
        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
        'discouraged and will be removed in an upcoming major release. Please refer to ' +
        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
        function (config) {
            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
        }
    );

    // constant that refers to the ISO standard
    hooks.ISO_8601 = function () {};

    // constant that refers to the RFC 2822 form
    hooks.RFC_2822 = function () {};

    // date from string and format string
    function configFromStringAndFormat(config) {
        // TODO: Move this to another part of the creation flow to prevent circular deps
        if (config


services.thesaurus.Keyword
import de.ingrid.igeserver.services.thesaurus.SNSUbaUmthesThesaurus
import de.ingrid.igeserver.services.thesaurus.ThesaurusSearchOptions
import de.ingrid.igeserver.services.thesaurus.ThesaurusSearchType
import io.kotest.core.spec.style.ShouldSpec
import io.kotest.matchers.collections.shouldHaveAtLeastSize
import io.kotest.matchers.shouldBe

class ThesaurusServiceTest :
    ShouldSpec({
        val searchOptions = ThesaurusSearchOptions(ThesaurusSearchType.CONTAINS)
        val searchOptionsExact = ThesaurusSearchOptions(ThesaurusSearchType.EXACT)

        should("return an empty list when search with empty string") {
            SNSUbaUmthesThesaurus().search("", searchOptions) shouldBe emptyList()
        }
        should("return a single match to a given string with exact search") {
            SNSUbaUmthesThesaurus().search("Wald", searchOptionsExact) shouldBe listOf(Keyword("https://sns.uba.de/umthes/TH_00028708", "Wald"))
        }
        should("return a list of matches to a given string with contains search") {
            val results = SNSUbaUmthesThesaurus().search("Wald", searchOptions)
            results shouldHaveAtLeastSize 10
        }
    })
/**
 * ==================================================
 * Copyright (C) 2023-2025 wemove digital solutions GmbH
 * ==================================================
 * Licensed under the EUPL, Version 1.2 or – as soon they will be
 * approved by the European Commission - subsequent versions of the
 * EUPL (the "Licence");
 *
 * You may not use this work except in compliance with the Licence.
 * You may obtain a copy of the Licence at:
 *
 * https://joinup.ec.europa.eu/software/page/eupl
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the Licence is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the Licence for the specific language governing permissions and
 * limitations under the Licence.
 */
package de.ingrid.igeserver.schema.ingrid_lfubayern

import de.ingrid.igeserver.schema.SchemaUtils
import io.kotest.core.spec.style.AnnotationSpec
import io.kotest.matchers.shouldBe

class InGridGeoServiceLfuBayern : AnnotationSpec() {

    private val schema = "/ingrid/schemes/lfubayern/geo-service_lfubayern.schema.json"

    @Test
    fun minimal() {
        val json = SchemaUtils.getJsonFileContent("/export/ingrid/geo-service.minimal.json").replaceFirst(
            "{",
            """
            { "dataSetURI": "myUri", "fees": "my fees", "resource": { "useConstraintsComments": "my useConstraintsComments" },
        """,
        )
        val result = SchemaUtils.validate(json, schema)
        result.size shouldBe 0
    }

    @Test
    fun negativeTest() = SchemaUtils.createNegativeTestByAddingInvalidField(schema, "/export/ingrid/geo-service.minimal.json")
}
/**
 * ==================================================
 * Copyright (C) 2023-2025 wemove digital solutions GmbH
 * ==================================================
 * Licensed under the EUPL, Version 1.2 or – as soon they will be
 * approved by the European Commission - subsequent versions of the
 * EUPL (the "Licence");
 *
 * You may not use this work except in compliance with the Licence.
 * You may obtain a copy of the Licence at:
 *
 * https://joinup.ec.europa.eu/software/page/eupl
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the Licence is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the Licence for the specific language governing permissions and


hOpReg;
        }

        opCode += o0->getSize() != 1;
        goto _EmitX86R;
      }

      if (encoded == ENC_OPS(Mem, Reg, None)) {
        opCode += o1->getSize() != 1;
        ADD_66H_P_BY_SIZE(o1->getSize());
        ADD_REX_W_BY_SIZE(o1->getSize());

        opReg = x86OpReg(o1);
        rmMem = x86OpMem(o0);
        goto _EmitX86M;
      }
      break;

    // ------------------------------------------------------------------------
    // [Fpu]
    // ------------------------------------------------------------------------

    case kX86InstEncodingIdFpuOp:
      goto _EmitFpuOp;

    case kX86InstEncodingIdFpuArith:
      if (encoded == ENC_OPS(Reg, Reg, None)) {
        opReg = x86OpReg(o0);
        rmReg = x86OpReg(o1);
        rmReg += opReg;

        // We switch to the alternative opcode if the first operand is zero.
        if (opReg == 0) {
_EmitFpArith_Reg:
          opCode = 0xD800 + ((opCode >> 8) & 0xFF) + static_cast<uint32_t>(rmReg);
          goto _EmitFpuOp;
        }
        else {
          opCode = 0xDC00 + ((opCode >> 0) & 0xFF) + static_cast<uint32_t>(rmReg);
          goto _EmitFpuOp;
        }
      }

      if (encoded == ENC_OPS(Mem, None, None)) {
        // 0xD8/0xDC, depends on the size of the memory operand; opReg has been
        // set already.
_EmitFpArith_Mem:
        opCode = (o0->getSize() == 4) ? 0xD8 : 0xDC;
        rmMem = x86OpMem(o0);
        goto _EmitX86M;
      }
      break;

    case kX86InstEncodingIdFpuCom:
      if (encoded == ENC_OPS(None, None, None)) {
        rmReg = 1;
        goto _EmitFpArith_Reg;
      }

      if (encoded == ENC_OPS(Reg, None, None)) {
        rmReg = x86OpReg(o0);
        goto _EmitFpArith_Reg;
      }

      if (encoded == ENC_OPS(Mem, None, None)) {
        goto _EmitFpArith_Mem;
      }
      break;

    case kX86InstEncodingIdFpuFldFst:
      if (encoded == ENC_OPS(Mem, None, None)) {
        rmMem = x86OpMem(o0);

        if (o0->getSize() == 4 && info.hasInstFlag(kX86InstFlagMem4)) {
          goto _EmitX86M;
        }

        if (o0->getSize() == 8 && info.hasInstFlag(kX86InstFlagMem8)) {
          opCode += 4;
          goto _EmitX86M;
        }

        if (o0->getSize() == 10 && info.hasInstFlag(kX86InstFlagMem10)) {
          opCode = extendedInfo.getSecondaryOpCode();
          opReg  = x86ExtractO(opCode);
          goto _EmitX86M;
        }
      }

      if (encoded == ENC_OPS(Reg, None, None)) {
        if (code == kX86InstIdFld) {
          opCode = 0xD9C0 + x86OpReg(o0);
          goto _EmitFpuOp;
        }

        if (code == kX86InstIdFst) {
          opCode = 0xDDD0 + x86OpReg(o0);
          goto _EmitF


54 (Debian GNU/Linux) FrontPage/5.0.2.2635 mod_python/3.1.3 Python/2.3.5 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4	73

1927	Apache/1.3.27 (Unix) mod_python/2.7.8 Python/2.2.2 mod_webapp/1.2.0-dev mod_perl/1.28 mod_throttle/3.1.2 PHP/4.3.10 FrontPage/5.0.2.2510 mod_ssl/2.8.14 OpenSSL/0.9.7d	73

1928	Apache/1.3.32 (Unix)	72

1929	Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8e DAV/2 JRun/4.0	72

1930	Apache/1.3.28 (Unix) PHP/4.4.4 with Suhosin-Patch FrontPage/5.0.2.2623	72

1931	Apache/1.3.3 (Unix) FrontPage/4.0.4.3	72

1932	Apache/2.0.54 (Debian GNU/Linux) PHP/5.2.3-0.dotdeb.0 with Suhosin-Patch	72

1933	Apache/2.2.6 (Unix) mod_ssl/2.2.6 OpenSSL/0.9.7l PHP/5.2.4 mod_jk2/2.0.4	72

1934	Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.7a DAV/2 PHP/5.1.2	72

1935	Apache/1.3.34 (Debian) mod_ipdrop/0.01 mod_throttle/3.1.2 PHP/4.4.4-8+etch3 mod_ssl/2.8.25 OpenSSL/0.9.8c mod_perl/1.29	72

1936	Apache/1.3.20 Sun Cobalt (Unix) mod_ssl/2.8.4 OpenSSL/0.9.6b PHP/4.3.10 mod_auth_pam_external/0.1 FrontPage/4.0.4.3 mod_perl/1.25	72

1937	Apache/2.0.55 (Win32) JRun/4.0 mod_ssl/2.0.59 OpenSSL/0.9.8d	72

1938	Apache/2.0.46 (Red Hat) mod_perl/1.99_09 Perl/v5.8.0 DAV/2 mod_auth_pgsql/2.0.1 PHP/4.3.2 mod_python/3.0.3 Python/2.2.3 mod_ssl/2.0.46 OpenSSL/0.9.7a	72

1


155,
				[80] = 310,
				[94] = 837,
				[167] = 628,
				[179] = 179,
				[368] = 519,
				[386] = 163,
				[388] = 286,
				[389] = 245,
				[457] = 843,
				[513] = 108,
				[532] = 50,
				[567] = 332,
				[652] = 135,
				[653] = 217,
				[674] = 228,
				["name"] = "Bootlegger Outpost",
			},
			[532] = {
				[39] = 87,
				[41] = 347,
				[65] = 738,
				[79] = 181,
				[80] = 337,
				[179] = 207,
				[367] = 468,
				[370] = 530,
				[386] = 191,
				[539] = 50,
				[652] = 86,
				[653] = 167,
				[674] = 178,
				["name"] = "Gunstan's Dig",
			},
			-- Un'Goro Crater
			[386] = {
				[27] = 755,
				[31] = 289,
				[32] = 248,
				[39] = 97,
				[41] = 200,
				[52] = 852,
				[73] = 82,
				[79] = 28,
				[80] = 276,
				[166] = 613,
				[364] = 441,
				[389] = 282,
				[532] = 185,
				[567] = 230,
				[652] = 225,
				["name"] = "Mossy Pile",
			},
			[79] = {
				[26] = 732,
				[27] = 778,
				[28] = 524,
				[32] = 243,
				[39] = 90,
				[41] = 236,
				[52] = 849,
				[65] = 776,
				[73] = 121,
				[80] = 338,
				[179] = 211,
				[367] = 359,
				[386] = 37,
				[389] = 275,
				[513] = 139,
				[532] = 179,
				[539] = 143,
				[565] = 291,
				[567] = 266,
				[652] = 261,
				[653] = 181,
				["name"] = "Marshal's Stand",
			},
			-- Silithus
			[73] = {
				[27] = 673,
				[28] = 630,
				[31] = 209,
				[37] = 402,
				[39] = 187,
				[41] = 120,
				[49] = 706,
				[52] = 741,
				[65] = 841,
				[79] = 113,
				[80] = 416,
				[93] = 765,
				[179] = 400,
				[367] = 241,
				[386] = 72,
				[389] = 352,
				[532] = 224,
				[539] = 221,
				[652] = 145,
				[653] = 65,
				[674] = 149,
				["name"] = "Cenarion Hold",
			},
			-- Uldum
			[653] = {
				[32] = 596,
				[39] = 349,
				[73] = 103,
				[367] = 461,
				[386] = 207,
				[539] = 314,
				[567] = 325,
				[616] = 1108,
				[652] = 121,
				[674] = 129,
				["name"] = "Oasis of Vir'sar",
			},
			[674] = {
				[39] = 253,
				[73] = 149,
				[79] = 244,
				[80] = 582,
				[166] = 769,
				[179] = 373,
				[532] = 167,
				[557] = 885,
				[567] = 297,
				[652] = 88,
				[653] = 87,


定能获得standbyNode
        standbyNode = NodesManager.getInstance().getStandbyNodeId(failPhysicalNodeId);
        if (standbyNode == null||NodeCheckManager.getInstance().checkNode(standbyNode.getPhysicalId(), false).equals(NodeHealth.NG)) {
            return;
        }
        PhysicalNodeDO node = NodesManager.getInstance().getNode(failPhysicalNodeId);
        int failNodeSequence = node.getSerialId();
        int failNodeLogicId = node.getLogicalId();
        standbyNode.setLogicalId(failNodeLogicId);
        standbyNode.setSerialId(failNodeSequence);
        standbyNode.setStatus(NodeRouteStatus.TEMP_FAILED.getValue());
        node.setSerialId(StoreNodeSequenceEnum.UNUSE_SEQUENCE.getValue());
        List<PhysicalNodeDO> nodes = new ArrayList<PhysicalNodeDO>();

        nodes.add(standbyNode);
        nodes.add(node);
        nodeService.updatePhysicalNodeList(nodes);
        NodesManager.getInstance().reLoadNodes();

        migrateKey = standbyNode.getPhysicalId();
        this.failPhysicalNodeIdList.add(migrateKey);

        // 获得永久失效节点的对等节点，只考虑两个序列,考虑到序列长度不一样的情况，对等序列的所有节点都可能包含失效节点的数据
        if (StoreNodeSequenceEnum.NORMAL_SEQUENCE_1.equals(StoreNodeSequenceEnum.getTypeByValue(failNodeSequence))) {
            relativeNodeList = NodesManager.getInstance().getNodeListBySequence(StoreNodeSequenceEnum.NORMAL_SEQUENCE_2);
        } else {
            relativeNodeList = NodesManager.getInstance().getNodeListBySequence(StoreNodeSequenceEnum.NORMAL_SEQUENCE_1);
        }

        this.start();
    }

    @Override
    protected boolean sendMigerateCommand() {
        return processSendCommand(relativeNodeList, MigrateTypeEnum.FOREVER_FAILOVER);
    }

    @Override
    protected void sendMigerateFinishCommand() {
        for (int i = 0; i < relativeNodeList.size(); i++) {
            PhysicalNodeDO node = relativeNodeList.get(i);
            SystemLogMonitor.info(MonitorEnum.MIGRATION, MonitorWarnConstants.NODE_FOREVER_FAILURE_RESOLVED
                                                         + node.getPhysicalId());
            MigrateCommand.finishMigerate(node.getPhysicalId(), failPhysicalNodeIdList, commandParamList.get(i),
                                          MigrateTypeEnum.FOREVER_FAILOVER);
        }

    }

    public void notifyError() {
        // TODO Auto-generated method stub

    }

    protected void updateStoreNode() {
        standbyNode.setStatus(NodeRouteStatus.OK.getValue());
        nodeService.updatePhysicalNode(standbyNode);
    }
}
/**
 * Project: doris.admin.service.common-0.1.0-SNAPSHOT
 *
 * File Created at 2011-5-24
 * $Id$
 *
 * Copyright 1999-2100 Alibaba.com Corporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Alibaba Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Alibaba.com.
 */
package com.alibaba.doris.admin.service.failover.node.check;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.alibaba.doris.admin.dataobject.PhysicalNodeDO;
import com.alibaba.doris.admin.service.common.migrate.manager.PostMigrateStatusManager;
import com.alibaba.doris.admin.service.common.migrate.status.MigrateStatusWatcher;
import com.alibaba.doris.admin.service.common.migrate.status.PostMigrateStatus;
import com.alibaba.doris.admin.service.common.node.NodesManager;
imp