28435/3211687

        PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());
        gen.init(password, salt, c);
        return ((KeyParameter) gen.generateDerivedParameters(256)).getKey();
    }

    private static byte[] performCipherOperation(
            int mode, byte[] iv, byte[] encryptKey, byte[] text) throws CipherException {

        try {
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
            Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");

            SecretKeySpec secretKeySpec = new SecretKeySpec(encryptKey, "AES");
            cipher.init(mode, secretKeySpec, ivParameterSpec);
            return cipher.doFinal(text);
        } catch (NoSuchPaddingException | NoSuchAlgorithmException
                | InvalidAlgorithmParameterException | InvalidKeyException
                | BadPaddingException | IllegalBlockSizeException e) {
            throw new CipherException("Error performing cipher operation", e);
        }
    }

    private static byte[] generateMac(byte[] derivedKey, byte[] cipherText) {
        byte[] result = new byte[16 + cipherText.length];

        System.arraycopy(derivedKey, 16, result, 0, 16);
        System.arraycopy(cipherText, 0, result, 16, cipherText.length);

        return Hash.sha3(result);
    }

    public static KlayCredentials decrypt(String password, WalletFile walletFile)
            throws CipherException {

        validate(walletFile);

        if (walletFile.getVersion() == VERSION_3){
            WalletFile.Crypto crypto = walletFile.getCrypto();
            ECKeyPair ecKeyPair = getECKeyPair(crypto, password);
            return KlayCredentials.create(ecKeyPair, Numeric.toHexStringWithPrefixZeroPadded(Numeric.toBigInt(walletFile.getAddress()),40));
        }

        List keyRing = (List)walletFile.getKeyring();
        List<List<ECKeyPair>> ecKeyPairForRoleBased = new ArrayList<>();
        if (keyRing.get(0) instanceof WalletFile.Crypto) {
            List<ECKeyPair> ecKeyPairs = new ArrayList<>();
            for (WalletFile.Crypto crypto : (List<WalletFile.Crypto>)keyRing) {
                ECKeyPair ecKeyPair = getECKeyPair(crypto, password);
                ecKeyPairs.add(ecKeyPair);
            }
            ecKeyPairForRoleBased.add(ecKeyPairs);
        } else {
            for (List<WalletFile.Crypto> multiKeyRing : (List<List<WalletFile.Crypto>>) keyRing) {
                List<ECKeyPair> ecKeyPairs = new ArrayList<>();
                for (WalletFile.Crypto crypto : multiKeyRing) {
                    ECKeyPair ecKeyPair = getECKeyPair(crypto, password);
                    ecKeyPairs.add(ecKeyPair);
                }
                ecKeyPairForRoleBased.add(ecKeyPairs);
            }
        }

        return KlayCredentials.createRoleBased(ecKeyPairForRoleBased, Numeric.toHexStringWithPrefixZeroPadded(Numeric.toBigInt(walletFile.getAddress()),40));
    }

    static ECKeyPair getECKeyPair(WalletFile.Crypto crypto, String password) throws CipherException {
        byte[] mac = Numeric.hexStringToByteArray(crypto.getMac());
        byte[] iv = Numeric.hexStringToByteArray(crypto.getCipherparams().getIv());
        byte[] cipherText = Numeric.hexStringToByteArray(crypto.getCiphertext());

        byte[] derivedKey;

        WalletFile.KdfParams kdfParams = crypto.getKdfparams();
        if (kdfParams instanceof WalletFile.ScryptKdfParams) {
            WalletFile.ScryptKdfParams scryptKdfParams =
                    (WalletFile.ScryptKdfParams) crypto.getKdfparams();
            int dklen = scryptKdfParams.g


length + enc.length];

			System.arraycopy( prefix, 0, res, 0, prefix.length );

			System.arraycopy( salt, 0, res, prefix.length, salt.length );

			System.arraycopy( enc, 0, res, prefix.length + salt.length, enc.length );

			return( res );

		}catch( Throwable e ){

			throw( new CryptoManagerException( "PBE encryption failed", e ));
		}
	}

	protected byte[]
   	decryptWithPBE(
   		byte[]		data,
   		char[]		password )

		throws CryptoManagerException
   	{
		boolean fail_is_pw_error = false;

		try{
			final int version;

			byte[] prefix;

			if ( 	data[0] == 0 && data[1] == 0 && data[2] == 0 && data[3] == 0 &&
					data[4] == 0 && data[5] == 0 && data[6] == 0 ){

				version = 2;

				prefix = new byte[8];

				System.arraycopy( data, 0, prefix, 0, prefix.length );

			}else{

				version = 1;

				prefix = new byte[0];
			}

			String 	algorithm 	= version==1?PBE_ALG_V1:PBE_ALG_V2;
			int		iterations	= version==1?PBE_ITERATIONS_V1:PBE_ITERATIONS_V2;

			byte[]	salt = new byte[8];

			System.arraycopy( data, prefix.length, salt, 0, salt.length );

			PBEKeySpec keySpec = new PBEKeySpec(password);

			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( algorithm );

			SecretKey key = keyFactory.generateSecret(keySpec);

			PBEParameterSpec paramSpec = new PBEParameterSpec(salt, iterations);

			Cipher cipher = Cipher.getInstance( algorithm );

			cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);

			fail_is_pw_error = true;

			return( cipher.doFinal( data, prefix.length + salt.length, data.length-prefix.length-salt.length ));

		}catch( Throwable e ){

			if ( fail_is_pw_error ){

				throw( new CryptoManagerPasswordException( true, "Password incorrect", e ));

			}else{
				throw( new CryptoManagerException( "PBE decryption failed", e ));
			}
		}
   	}

	@Override
	public void
	clearPasswords()
	{
		clearPasswords( CryptoManagerPasswordHandler.HANDLER_TYPE_ALL );
	}

	@Override
	public void
	clearPasswords(
		int		password_handler_type )
	{
		session_passwords.clear();

		for (int i=0;i<CryptoManager.HANDLERS.length;i++){

			clearPassword( CryptoManager.HANDLERS[i], password_handler_type );
		}

		ecc_handler.lock();
	}

	protected void
   	clearPassword(
   		int		handler,
   		int		password_handler_type )
   	{
   		final String persist_timeout_key 	= CryptoManager.CRYPTO_CONFIG_PREFIX + "pw." + handler + ".persist_timeout";
   		final String persist_pw_key 		= CryptoManager.CRYPTO_CONFIG_PREFIX + "pw." + handler + ".persist_value";
		final String persist_pw_key_type	= CryptoManager.CRYPTO_CONFIG_PREFIX + "pw." + handler + ".persist_type";

		int	pw_type = (int)COConfigurationManager.getLongParameter( persist_pw_key_type, CryptoManagerPasswordHandler.HANDLER_TYPE_USER );

		if ( 	password_handler_type == CryptoManagerPasswordHandler.HANDLER_TYPE_ALL ||
				password_handler_type == pw_type ){

			COConfigurationManager.removeParameter( persist_timeout_key );
			COConfigurationManager.removeParameter( persist_pw_key );
		}
   	}

	protected passwordDetails
	setPasswo


 () => {
  let controller: ZombieController;
  let service: ZombieService;

  let zombieRepositoryMock: MockedClass<ZombieRepository>;

  const mockZombieRepository = () => {
    zombieRepositoryMock = {
      findZombieById: jest.fn(),
      findAllZombies: jest.fn(),
      removeZombieById: jest.fn(),
    };
    return zombieRepositoryMock;
  };

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [ZombieController],
      providers: [
        ZombieService,
        { provide: ZombieRepository, useFactory: mockZombieRepository },
      ],
    }).compile();

    service = module.get<ZombieService>(ZombieService);
    controller = module.get<ZombieController>(ZombieController);

    ((Zombie as any) as jest.Mock).mockClear();
  });

  describe('Initialization', () => {
    it('should result in defined controller', () => {
      // Arrange (Given)
      // -

      // Act (When)
      // -

      // Assert (Then)
      expect(controller).toBeDefined();
    });

    it('should result in defined service', () => {
      // Arrange (Given)
      // -

      // Act (When)
      // -

      // Assert (Then)
      expect(service).toBeDefined();
    });
  });

  describe('Creating', () => {
    it('should response zombie with corresponding name when creating', async () => {
      // Arrange (Given)
      // -

      // Act (When)
      const zombieRo = await controller.create({ name: 'Chris' });

      // Assert (Then)
      expect(zombieRo.name).toEqual('Chris');
    });

    it('should instantiate and save zombie when calling create', async () => {
      // Arrange (Given)
      // -

      // Act (When)
      expect(Zombie).not.toHaveBeenCalled();
      expect(Zombie.save).not.toHaveBeenCalled();

      await controller.create({ name: 'Arthur' });

      // Assert (Then)
      expect(Zombie).toHaveBeenCalledTimes(1);
      expect((Zombie as any).mock.instances[0].save).toHaveBeenCalledTimes(1);
    });

    it('should automatically generate positive timestamp', async () => {
      // Arrange (Given)
      // -

      // Act (When)
      const zombieRo = await controller.create({ name: 'Eric' });

      // Assert (Then)
      expect(zombieRo.createdTimestamp).toBeDefined();
      expect(Number.isInteger(zombieRo.createdTimestamp)).toBeTruthy();
      expect(zombieRo.createdTimestamp).toBeGreaterThan(0);
    });
  });

  describe('Finding', () => {
    it('should call repository when finding a zombie', async () => {
      // Arrange (Given)
      zombieRepositoryMock.findZombieById.mockResolvedValue({});

      // Act (When)
      expect(zombieRepositoryMock.findZombieById).not.toHaveBeenCalled();

      await controller.findOne(123);

      // Assert (Then)
      expect(zombieRepositoryMock.findZombieById).toHaveBeenCalledTimes(1);
      expect(zombieRepositoryMock.findZombieById).toHaveBeenLastCalledWith(123);
    });

    it('should response with properly mapped zombie when finding one', async () => {
      // Arrange (Given)
      zombieRepositoryMock.findZombieById.mockResolvedValue({
        name: 'Kenny',
        id: 321,
        createdTimestamp: 1600000000000,
      });

      // Act (When)
      const zombieRo = await controller.findOne(321);

      // Assert (Then)
      expect(zombieRo).toEqual({
        name: 'Kenny',
        id: 321,
        createdTimestamp: 1600000000000,


 × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0023 × 200D ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0023 × 0020 ÷ 200D ÷	#  × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0023 × 0308 × 200D ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 200D ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0023 × 00A7 ÷	#  × [0.3] NUMBER SIGN (AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 0020 ÷ 00A7 ÷	#  × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 0308 × 00A7 ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 00A7 ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 50005 ÷	#  × [0.3] NUMBER SIGN (AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0020 ÷ 50005 ÷	#  × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0308 × 50005 ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 50005 ÷	#  × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0E01 ÷	#  × [0.3] NUMBER SIGN (AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0023 × 0020 ÷ 0E01 ÷	#  × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0]


	// name
		r.Name = hash.GetEventName(ehash)
		if len(r.Name) < 1 {
			r.Name = hash.GetNodeName(e.Creator)
			if len(r.Name) < 1 {
				r.Name = string(rune('a' + r.Self))
			}
			r.Name = fmt.Sprintf("%s%03d", r.Name, e.Seq)
		}
		if w := len([]rune(r.Name)); scheme.ColWidth < w {
			scheme.ColWidth = w
		}
		// parents
		r.Refs = make([]int, len(nodeCols))
		selfRefs := 0
		for _, p := range e.Parents {
			parent := processed[p]
			if parent == nil {
				return "", fmt.Errorf("parent %s of %s not found", p.String(), ehash.String())
			}
			if parent.Creator == e.Creator {
				selfRefs++

				// if more then 1 -> fork. Don't skip refs filling.
				if seqCount[e.Creator][e.Seq] == 1 {
					continue
				}
			}

			refCol := nodeCols[parent.Creator]

			var shift int
			if parent.Creator != e.Creator {
				shift = 1
			}

			r.Refs[refCol] = creatorLastIndex[parent.Creator] - eventIndex[parent.Creator][parent.Hash()] + shift
		}
		if (e.Seq <= 1 && selfRefs != 0) || (e.Seq > 1 && selfRefs != 1) {
			return "", fmt.Errorf("self-parents count of %s is %d", ehash, selfRefs)
		}

		// first and last refs
		r.First = len(r.Refs)
		for i, ref := range r.Refs {
			if ref == 0 {
				continue
			}
			if r.First > i {
				r.First = i
			}
			if r.Last < i {
				r.Last = i
			}
		}
		// processed
		scheme.Add(r)
		processed[ehash] = e

		eventIndex[e.Creator][ehash] = creatorLastIndex[e.Creator]
	}

	scheme.Optimize()

	scheme.ColWidth += 3
	return scheme.String(), nil
}

func filler(r rune) bool {
	return r == ' ' || r == '─' || r == '═'
}

/*
 * staff:
 */

type (
	row struct {
		Name  string
		Refs  []int
		Self  int
		First int
		Last  int
	}

	rows struct {
		rows     []*row
		ColWidth int
	}

	position byte
)

const (
	none  position = 0
	pass           = iota
	first          = iota
	left           = iota
	right          = iota
	last           = iota
)

func (r *row) Position(i int) position {
	// if left
	if i < r.Self {
		if i < r.First {
			return none
		}
		if i > r.First {
			if r.Refs[i] > 0 {
				return left
			}
			return pass
		}
		return first
	}
	// else right
	if i > r.Last {
		return none
	}
	if i < r.Last {
		if r.Refs[i] > 0 || i == r.Self {
			return right
		}
		return pass
	}
	return last
}

// Note: after any changes below, run:
// go test -count=100 -run="TestDAGtoASCIIschemeRand" ./inter
// go test -count=100 -run="TestDAGtoASCIIschemeOptimisation" ./inter
func (rr *rows) Optimize() {

	for curr, row := range rr.rows {
	REFS:
		for iRef, ref := range row.Refs {
			// TODO: Can we decrease ref from 2 to 1 ?
			if ref < 3 {
				continue REFS
			}

			//


ype != PointType.REFERENCE_POINT ? ColumnType.APOSTERIORI_POINT : ColumnType.HIDDEN, columnIndex, false, true);
		doubleColumn.setComparator(new AbsoluteValueComparator());
		table.getColumns().add(doubleColumn);

		// z-Comp
		columnIndex = table.getColumns().size();
		labelText   = this.type == PointType.STOCHASTIC_POINT ? i18n.getString("UIPointTableBuilder.tableheader.residual.z.label", "\u03B5z")                                                 : i18n.getString("UIPointTableBuilder.tableheader.deviation.z.label", "\u0394z");
		tooltipText = this.type == PointType.STOCHASTIC_POINT ? i18n.getString("UIPointTableBuilder.tableheader.residual.z.tooltip", "Residual of z-component of point, i.e. computed minus observed") : i18n.getString("UIPointTableBuilder.tableheader.deviation.z.tooltip", "Deviation of z-component w.r.t. z0");
		cellValueType = CellValueType.LENGTH_RESIDUAL;
		columnContentType = ColumnContentType.RESIDUAL_Z;
		header = new ColumnTooltipHeader(cellValueType, labelText, tooltipText, options.getFormatterOptions().get(cellValueType).getUnit());
		doubleColumn = this.<Double>getColumn(tableContentType, columnContentType, header, PointRow::residualZProperty, getDoubleCallback(cellValueType), this.dimension != 2 && this.type != PointType.REFERENCE_POINT ? ColumnType.APOSTERIORI_POINT : ColumnType.HIDDEN, columnIndex, false, true);
		doubleColumn.setComparator(new AbsoluteValueComparator());
		table.getColumns().add(doubleColumn);

		// Gross-Error
		// y-Comp
		columnIndex = table.getColumns().size();
		labelText   = i18n.getString("UIPointTableBuilder.tableheader.grosserror.y.label", "\u2207y");
		tooltipText = i18n.getString("UIPointTableBuilder.tableheader.grosserror.y.tooltip", "Gross-error in y");
		cellValueType = CellValueType.LENGTH_RESIDUAL;
		columnContentType = ColumnContentType.GROSS_ERROR_Y;
		header = new ColumnTooltipHeader(cellValueType, labelText, tooltipText, options.getFormatterOptions().get(cellValueType).getUnit());
		doubleColumn = this.<Double>getColumn(tableContentType, columnContentType, header, PointRow::grossErrorYProperty, getDoubleCallback(cellValueType), this.dimension != 1 && (this.type == PointType.STOCHASTIC_POINT || this.type == PointType.REFERENCE_POINT) ? ColumnType.APOSTERIORI_POINT : this.dimension != 1 && this.type == PointType.DATUM_POINT ? ColumnType.APOSTERIORI_POINT_CONGRUENCE : ColumnType.HIDDEN, columnIndex, false, true);
		doubleColumn.setComparator(new AbsoluteValueComparator());
		table.getColumns().add(doubleColumn);

		// x-Comp
		columnIndex = table.getColumns().size();
		labelText   = i18n.getString("UIPointTableBuilder.tableheader.grosserror.x.label", "\u2207x");
		tooltipText = i18n.getString("UIPointTableBuilder.tableheader.grosserror.x.tooltip", "Gross-error in x");
		cellValueType = CellValueType.LENGTH_RESIDUAL;
		columnContentType = ColumnContentType.GROSS_ERROR_X;
		header = new ColumnTooltipHeader(cellValueType, labelText, tooltipText, options.getFormatterOptions().get(cellValueType).getUnit());
		doubleColumn = this.<Double>getColumn(tableContentType, columnContentType, header, PointRow::grossErrorXProperty, getDoubleCallback(cellValueType), this.dimension != 1 && (this.type == PointType.STOCHASTIC_POINT || this.type == PointType.REFERENCE_POINT) ? ColumnType.APOSTERIORI_POINT : this.dimension != 1 && this.


sb-grey:focus::-webkit-input-placeholder {
    color: #808080;
  }

  .below-lg\:focus\:placeholder-sb-grey:focus::-moz-placeholder {
    color: #808080;
  }

  .below-lg\:focus\:placeholder-sb-grey:focus:-ms-input-placeholder {
    color: #808080;
  }

  .below-lg\:focus\:placeholder-sb-grey:focus::-ms-input-placeholder {
    color: #808080;
  }

  .below-lg\:focus\:placeholder-sb-grey:focus::placeholder {
    color: #808080;
  }

  .below-lg\:pointer-events-none {
    pointer-events: none;
  }

  .below-lg\:pointer-events-auto {
    pointer-events: auto;
  }

  .below-lg\:static {
    position: static;
  }

  .below-lg\:fixed {
    position: fixed;
  }

  .below-lg\:absolute {
    position: absolute;
  }

  .below-lg\:relative {
    position: relative;
  }

  .below-lg\:sticky {
    position: -webkit-sticky;
    position: sticky;
  }

  .below-lg\:inset-0 {
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
  }

  .below-lg\:inset-auto {
    top: auto;
    right: auto;
    bottom: auto;
    left: auto;
  }

  .below-lg\:inset-y-0 {
    top: 0;
    bottom: 0;
  }

  .below-lg\:inset-x-0 {
    right: 0;
    left: 0;
  }

  .below-lg\:inset-y-auto {
    top: auto;
    bottom: auto;
  }

  .below-lg\:inset-x-auto {
    right: auto;
    left: auto;
  }

  .below-lg\:top-0 {
    top: 0;
  }

  .below-lg\:right-0 {
    right: 0;
  }

  .below-lg\:bottom-0 {
    bottom: 0;
  }

  .below-lg\:left-0 {
    left: 0;
  }

  .below-lg\:top-auto {
    top: auto;
  }

  .below-lg\:right-auto {
    right: auto;
  }

  .below-lg\:bottom-auto {
    bottom: auto;
  }

  .below-lg\:left-auto {
    left: auto;
  }

  .below-lg\:resize-none {
    resize: none;
  }

  .below-lg\:resize-y {
    resize: vertical;
  }

  .below-lg\:resize-x {
    resize: horizontal;
  }

  .below-lg\:resize {
    resize: both;
  }

  .below-lg\:shadow {
    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
  }

  .below-lg\:shadow-md {
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  }

  .below-lg\:shadow-lg {
    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
  }

  .below-lg\:shadow-xl {


?: (
    url: string,
    context: {
      propName: string;
      layer: Layer;
      loaders?: any[];
      loadOptions?: any;
      signal?: AbortSignal;
    }
  ) => any;
  /**
   * The dependencies used to trigger re-evaluation of functional accessors (get*).
   */
  updateTriggers?: Record<string, any>;

  /**
   * If the layer should be rendered. Default true.
   */
  visible?: boolean;
  /**
   * If the layer can be picked on pointer events. Default false.
   */
  pickable?: boolean;
  /**
   * Opacity of the layer, between 0 and 1. Default 1.
   */
  opacity?: number;
  /**
   * The coordinate system of the data. Default to COORDINATE_SYSTEM.LNGLAT in a geospatial view or COORDINATE_SYSTEM.CARTESIAN in a non-geospatial view.
   */
  coordinateSystem?: typeof COORDINATE_SYSTEM[keyof typeof COORDINATE_SYSTEM];
  /**
   * The coordinate origin of the data.
   */
  coordinateOrigin?: [number, number, number];
  /**
   * A 4x4 matrix to transform local coordianates to the world space.
   */
  modelMatrix?: number[];
  /**
   * (Geospatial only) normalize geometries that cross the 180th meridian. Default false.
   */
  wrapLongitude?: boolean;
  /**
   * The format of positions, default 'XYZ'.
   */
  positionFormat?: 'XYZ' | 'XY';
  /**
   * The format of colors, default 'RGBA'.
   */
  colorFormat?: 'RGBA' | 'RGB';
  /**
   * Override the WebGL parameters used to draw this layer. See https://luma.gl/modules/gltools/docs/api-reference/parameter-setting#parameters
   */
  parameters?: any;
  /**
   * Create smooth transitions when prop values update.
   */
  transitions?: Record<string, any>;
  /**
   * Add additional functionalities to this layer.
   */
  extensions?: any[];
  /**
   * Add support for additional data formats.
   */
  loaders?: any[];
  /**
   * Callback to calculate the polygonOffset WebGL parameter.
   */
  getPolygonOffset?: (params: {layerIndex: number}) => [number, number] | null;

  /**
   * Enable GPU-based object highlighting. Default false.
   */
  autoHighlight?: boolean;
  /**
   * The index of the data object to highlight. If unspecified, the currently hoverred object is highlighted.
   */
  highlightedObjectIndex?: number;
  /**
   * The color of the highlight.
   */
  highlightColor?: number[] | ((pickingInfo: PickingInfo) => number[]);

  /**
   * Called when remote data is fetched and parsed.
   */
  onDataLoad?: (data: LayerData, context: {propName: string; layer: Layer}) => void;
  /**
   * Called when the layer encounters an error.
   */
  onError?: (error: Error) => boolean | void;
  /**
   * Called when the mouse enters/leaves an object of this layer.
   */
  onHover?: (pickingInfo: PickingInfo, event: MjolnirEvent) => boolean | void;
  /**
   * Called when the mouse clicks over an object of this layer.
   */
  onClick?: (pickingInfo: PickingInfo, event: MjolnirEvent) => boolean | void;
  /**
   * Called when the mouse starts dragging an object of this layer.
   */
  onDragStart?: (pickingInfo: PickingInfo, event: MjolnirEvent) => boolean | void;
  /**
   * Called when the mouse drags an object of this layer.
   */
  onDrag?: (pickingInfo: PickingInfo, event: MjolnirEvent) => boolean | void;
  /**
   * Called when the mouse releases an object of this layer.
   */
  onDragEnd?: (pickingInfo: PickingInfo, event: M


from collections import namedtuple

Contact = namedtuple(
    'Contact', ['name', 'family', 'phone'], defaults=("", "", ""))

# cnt = Contact(name='Meisam', family='Ilka', phone='09369230358')

# res = cnt.count("Meisam")
# print(res)

# print(cnt.family)
# print(cnt.index("Ilka"))
# print(cnt.index("Ilka", 1))
# print(cnt.index("Ilka", 1, 3))

# print(len(cnt))
# print("Meisam" in cnt)
# print("Meisam" not in cnt)

# cnt1 = Contact(name='Meisam', family='Ilka', phone='09369230358')
# cnt2 = Contact(name='Meisam', family='Ilka', phone='09369230358')
# cnt2 = cnt1

# print(id(cnt1))
# print(id(cnt2))

# print(cnt1 == cnt2)

# print(cnt1 is cnt2)

cnt1 = Contact(name='Meisam', family='Ilka', phone='09369230358')
# cnt2 = cnt1._replace(name = "mhdi")
# cnt2 = Contact._make(("meisam", "ilka", "0936"))
# print(Contact._field_defaults)
print(cnt1._fields)

# print(dir(cnt1))
# ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__match_args__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_asdict', '_field_defaults', '_fields', '_make', '_replace', 'count', 'family', 'index', 'name', 'phone']


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

code,
kbd,
samp {
	font-family: monospace, monospace; /* 1 */
	font-size: 1em; /* 2 */
}

/**
 * Add the correct font style in Android 4.3-.
 */

dfn {
	font-style: italic;
}

/**
 * Add the correct background and color in IE 9-.
 */

mark {
	background-color: #ff0;
	color: #000;
}

/**
 * Add the correct font size in all browsers.
 */

small {
	font-size: 80%;
}

/**
 * Prevent `sub` and `sup` elements from affecting the line height in
 * all browsers.
 */

sub,
sup {
	font-size: 75%;
	line-height: 0;
	position: relative;
	vertical-align: baseline;
}

sub {
	bottom: -0.25em;
}

sup {
	top: -0.5em;
}

/* Embedded content
   ========================================================================== */

/**
 * Add the correct display in IE 9-.
 */

audio,
video {
	display: inline-block;
}

/**
 * Add the correct display in iOS 4-7.
 */

audio:not([controls]) {
	display: none;
	height: 0;
}

/**
 * Remove the border on images inside links in IE 10-.
 */

img {
	border-style: none;
}

/**
 * Hide the overflow in IE.
 */

svg:not(:root) {
	overflow: hidden;
}

/* Forms
   ========================================================================== */

/**
 * 1. Change the font styles in all browsers (opinionated).
 * 2. Remove the margin in Firefox and Safari.
 */

button,
input,
optgroup,
select,
textarea {
	font-family: sans-serif; /* 1 */
	font-size: 100%; /* 1 */
	line-height: 1.15; /* 1 */
	margin: 0; /* 2 */
}

/**
 * Show the overflow in IE.
 * 1. Show the overflow in Edge.
 */

button,
input {
	/* 1 */
	overflow: visible;
}

/**
 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 * 1. Remove the inheritance of text transform in Firefox.
 */

button,
select {
	/* 1 */
	text-transform: none;
}

/**
 * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
 *    controls in Android 4.
 * 2. Correct the inability to style clickable types in iOS and Safari.
 */

button,
html [type="button"], /* 1 */
[type="reset"],
[type="submit"] {
	-webkit-appearance: button; /* 2 */
}

/**
 * Remove the inner border and padding in Firefox.
 */

button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
	border-style: none;
	padding: 0;
}

/**
 * Restore the focus styles unset by the previous rule.
 */

button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
	outline: 1px dotted ButtonText;
}

/**
 * Correct the padding in Firefox.
 */

fieldset {
	padding: 0.35em 0.75em 0.625em;
}

/**
 * 1. Correct the text wrapping in Edge and IE.
 * 2. Correct the color inheritance from `fieldset` elements in IE.
 * 3. Remove the padding so developers are not caught out when they zero out
 *    `fieldset` elements in all browsers.


tId(), progress, mInfo.getFilename(), mInfo.getAutoSyncUpload()));
		printUploadState();
	}

	// temp for debug
	private void printUploadState() {

		String state = null;
		switch (mInfo.getState()) {
			case -1:
				state = "Fail";
				break;
			case 0:
				state = "Finish";
				break;
			case 1:
				state = "Ready";
				break;
			case 2:
				state = "Ing";
				break;
			case 3:
				state = "Stop";
				break;
			default:
				break;
		}
		MKLog.d(WebDAVJackrabbitUploader.class, "---------------------------------------------");
		MKLog.d(WebDAVJackrabbitUploader.class, "ID               : " + mInfo.getId());
		MKLog.d(WebDAVJackrabbitUploader.class, "getFilename      : " + mInfo.getFilename());
		MKLog.d(WebDAVJackrabbitUploader.class, "getFrom          : " + mInfo.getFrom());
		MKLog.d(WebDAVJackrabbitUploader.class, "getTo            : " + mInfo.getTo());
		MKLog.d(WebDAVJackrabbitUploader.class, "state            : " + state);
		MKLog.d(WebDAVJackrabbitUploader.class, "progress         : " + mInfo.getPercent());
		MKLog.d(WebDAVJackrabbitUploader.class, "AutoSyncDownload : " + mInfo.getAutoSyncUpload());
	}
}

package com.vae.wuyunxing.commomui.swipebacklayout;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import com.vae.wuyunxing.commomui.R;

import java.util.ArrayList;
import java.util.List;

public class SwipeBackLayout extends FrameLayout {
    /**
     * Minimum velocity that will be detected as a fling
     */
    private static final int MIN_FLING_VELOCITY = 400; // dips per second

    private static final int DEFAULT_SCRIM_COLOR = 0x99000000;

    private static final int FULL_ALPHA = 255;

    /**
     * Edge flag indicating that the left edge should be affected.
     */
    public static final int EDGE_LEFT = ViewDragHelper.EDGE_LEFT;

    /**
     * Edge flag indicating that the right edge should be affected.
     */
    public static final int EDGE_RIGHT = ViewDragHelper.EDGE_RIGHT;

    /**
     * Edge flag indicating that the bottom edge should be affected.
     */
    public static final int EDGE_BOTTOM = ViewDragHelper.EDGE_BOTTOM;

    /**
     * Edge flag set indicating all edges should be affected.
     */
    public static final int EDGE_ALL = EDGE_LEFT | EDGE_RIGHT | EDGE_BOTTOM;

    /**
     * A view is not currently being dragged or animating as a result of a
     * fling/snap.
     */
    public static final int STATE_IDLE = ViewDragHelper.STATE_IDLE;

    /**
     * A view is currently being dragged. The position is currently changing as
     * a result of user input or simulated user input.
     */
    public static final int STATE_DRAGGING = ViewDragHelper.STATE_DRAGGING;

    /**
     * A view is currently settling into place as a result of a fling or
     * predefined non-interactive motion.
     */
    public static final int STATE_SETTLING = ViewDragHelper.STATE_SETTLING;

    /**
     * Default threshold of scroll
     */


            object : ThreePointCallback {
                override fun parseData(data: Any): ThreePointItemItemData? {
                    runCatching {
                        val title = data.getJsonFieldValueAs<String>("title")
                        val link = data.getJsonFieldValueAs<String>("uri")
                        return ThreePointItemItemData(
                            name = "分享链接",
                            data = Json.encodeToString(Item(title, link))
                        )
                    }
                    return null
                }

                override fun onClick(data: ThreePointItemItemData) {
                    val item = Json.decodeFromString<Item>(data.data!!)
                    val intent = Intent.createChooser(Intent().apply {
                        action = Intent.ACTION_SEND
                        type = "text/plain"
                        putExtra(Intent.EXTRA_TITLE, item.title)
                        putExtra(Intent.EXTRA_TEXT, item.link)
                    }, "分享链接")
                    ActivityUtils.topActivity!!.startActivity(intent)
                }
            }
        )
        return true
    }

    override fun onUnload(): Boolean {
        ThreePointHook.removeThreePointCallback(SHARE_ID)
        return super.onUnload()
    }

    @SuppressLint("UnsafeOptInUsageError")
    @Serializable
    data class Item(
        val title: String,
        val link: String
    )
}
package io.github.duzhaokun123.yabr.logger

interface Logger {
    enum class Level {
        DEBUG, INFO, WARN, ERROR, VERBOSE
    }

    fun d(vararg messages: Any?) {
        messages.forEach { message ->
            log(Level.DEBUG, message)
        }
    }

    fun i(vararg messages: Any?) {
        messages.forEach { message ->
            log(Level.INFO, message)
        }
    }

    fun w(vararg messages: Any?) {
        messages.forEach { message ->
            log(Level.WARN, message)
        }
    }

    fun e(vararg messages: Any?) {
        messages.forEach { message ->
            log(Level.ERROR, message)
        }
    }

    fun v(vararg messages: Any?) {
        messages.forEach { message ->
            log(Level.VERBOSE, message)
        }
    }

    fun log(level: Level, message: Any?) {
        writeText(
            level,
            when (message) {
                is Throwable -> message.stackTraceToString()
                is Array<*> -> message.contentToString()
                else -> message.toString()
            }
        )
    }

    fun writeText(level: Level, text: String)
}package io.github.duzhaokun123.yabr.module.core

import android.os.Build
import io.github.duzhaokun123.module.base.ModuleEntry
import io.github.duzhaokun123.yabr.module.UICategory
import io.github.duzhaokun123.yabr.module.base.BaseModule
import io.github.duzhaokun123.yabr.module.base.Core
import io.github.duzhaokun123.yabr.module.base.DexKitMemberOwner
import io.github.duzhaokun123.yabr.module.base.UIEntry
import io.github.duzhaokun123.yabr.module.base.dexKitMember
import io.github.duzhaokun123.yabr.module.base.multiLoadAllSuccess
import io.github.duzhaokun123.yabr.utils.loadClass
import io.github.duzhaokun123.yabr.utils.loaderContext
import java.io.File

data class BiliVersionInfo(
    val packageName: String,
    val versionName: String,
    val versionCode: Long,
)

@ModuleEntry(
    id = "bili_info"
)
o


ionKeys.length, 4, "number of coverage keys correct");
        t.eq(res1_1_0.version, "1.1.0", "version correct");

        var metadata = res1_1_0.coverageDescriptions.ro_dsm;

        t.eq(metadata.identifier, "ro_dsm", "correct identifier");
        t.eq(metadata.title, "RO DSM", "correct title");
        t.eq(metadata.abstract, "Digital Surface Model (DSM) raster data set of inner city Rotterdam", "correct abstract");
        t.eq(metadata.supportedCRSs.length, 4, "correct number of supported CRSs");
        t.eq(metadata.supportedCRSs[3], "urn:ogc:def:crs:EPSG::4326", "correct value for first supported CRS");
        t.eq(metadata.supportedFormats.length, 1, "correct number of supported formats");
        t.eq(metadata.supportedFormats[0], "image/tiff", "correct value for first supported format");

        var gridCRS = metadata.domain.spatialDomain.gridCRS;
        t.eq(gridCRS.gridBaseCRS, "urn:ogc:def:crs:EPSG::28992", "correct gridBaseCRS");
        t.eq(gridCRS.gridCS, "urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS", "correct gridCS");
        t.eq(gridCRS.gridOffsets.x,  0.5, "correct gridOffsets.x");
        t.eq(gridCRS.gridOffsets.y, -0.5, "correct gridOffsets.y");
        t.eq(gridCRS.gridOrigin.x, 91979.25, "correct gridOrigin.x");
        t.eq(gridCRS.gridOrigin.y, 437659.25, "correct gridOrigin.y");
        t.eq(gridCRS.gridType, "urn:ogc:def:method:WCS:1.1:2dSimpleGrid", "correct gridType");

        t.eq(metadata.nativeCRS, "urn:ogc:def:crs:EPSG::28992", "correct native CRS");

        var nativeBB = metadata.domain.spatialDomain.boundingBoxes[metadata.nativeCRS];
        t.ok(!!nativeBB, "found native bounding box");
        t.eq(nativeBB.top,    436326,   "correct native bounding box top value");
        t.eq(nativeBB.bottom, 437659.5, "correct native bounding box bottom value");
        t.eq(nativeBB.left,   91979,    "correct native bounding box left value");
        t.eq(nativeBB.right,  92617,    "correct native bounding box right value");

        t.eq(metadata.supportedFormats.length, 1, "correct number of supported formats");
        t.eq(metadata.supportedFormats[0], "image/tiff", "correct initial supported format value");

        // Check consistency between 1.0.0 and 1.1.0
        t.eq(res1_0_0.coverageDescriptions.ro_dsm.identifier, res1_1_0.coverageDescriptions.ro_dsm.identifier, "1.0.0 and 1.1.0 have same identifier");
        t.eq(res1_0_0.coverageDescriptions.ro_dsm.title, res1_1_0.coverageDescriptions.ro_dsm.title, "1.0.0 and 1.1.0 have same title");
        // Actual supported formats will be expressed differently (image/tiff v GTiff), so we can't easily compare directly
        t.eq(res1_0_0.coverageDescriptions.ro_dsm.supportedFormats.length,
             res1_1_0.coverageDescriptions.ro_dsm.supportedFormats.length,
             "1.0.0 and 1.1.0 have same supportedFormats.length");

        // Use substr here to account for differing CRS formats
        t.eq(


/*
   (c) Copyright 2012-2013  DirectFB integrated media GmbH
   (c) Copyright 2001-2013  The world wide DirectFB Open Source Community (directfb.org)
   (c) Copyright 2000-2004  Convergence (integrated media) GmbH

   All rights reserved.

   Written by Denis Oliver Kropp <dok@directfb.org>,
              Andreas Shimokawa <andi@directfb.org>,
              Marek Pikarski <mass@directfb.org>,
              Sven Neumann <neo@directfb.org>,
              Ville Syrjälä <syrjala@sci.fi> and
              Claudio Ciccani <klan@users.sf.net>.

   This 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 of the License, or (at your option) any later version.

   This 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 this library; if not, write to the
   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.
*/

#ifndef __FUSIONSOUND_CORE_TYPES_SOUND_H__
#define __FUSIONSOUND_CORE_TYPES_SOUND_H__

typedef struct __FS_CoreSound       CoreSound;
typedef struct __FS_CoreSoundShared CoreSoundShared;

typedef struct __FS_CoreSoundDevice CoreSoundDevice;

typedef struct __FS_CoreSoundBuffer CoreSoundBuffer;

typedef struct __FS_CorePlayback    CorePlayback;

#endif


AS a, MIN(salary{f}#14) AS b, gender{f}#11]]
     *   \_EsRelation[test][_meta_field{f}#15, emp_no{f}#9, first_name{f}#10, g..]
     * }

     */
    public void testIsNotNullConstraintForStatsWithMultiAggWithGrouping() {
        var plan = optimizedPlan("""
            from test
            | stats a = sum(emp_no), b = min(salary) by gender
            """);

        var limit = as(plan, Limit.class);
        var agg = as(limit.child(), Aggregate.class);
        assertThat(Expressions.names(agg.aggregates()), contains("a", "b", "gender"));

        var from = as(agg.child(), EsRelation.class);
    }

    /**
     * Expects
     *
{@code
     * Limit[1000[INTEGER]]
     * \_Aggregate[[emp_no{f}#9],[SUM(emp_no{f}#9) AS a, MIN(salary{f}#14) AS b, emp_no{f}#9]]
     *   \_EsRelation[test][_meta_field{f}#15, emp_no{f}#9, first_name{f}#10, g..]
     * }

     */
    public void testIsNotNullConstraintForStatsWithMultiAggWithAndOnGrouping() {
        var plan = optimizedPlan("""
            from test
            | stats a = sum(emp_no), b = min(salary) by emp_no
            """);

        var limit = as(plan, Limit.class);
        var agg = as(limit.child(), Aggregate.class);
        assertThat(Expressions.names(agg.aggregates()), contains("a", "b", "emp_no"));

        var from = as(agg.child(), EsRelation.class);
    }

    /**
     * Expects
     *
{@code
     * Limit[1000[INTEGER]]
     * \_Aggregate[[w{r}#14, g{r}#16],[COUNT(b{r}#24) AS c, w{r}#14, gender{f}#32 AS g]]
     *   \_Eval[[emp_no{f}#30 / 10[INTEGER] AS x, x{r}#4 + salary{f}#35 AS y, y{r}#8 / 4[INTEGER] AS z, z{r}#11 * 2[INTEGER] +
     *  3[INTEGER] AS w, salary{f}#35 + 4[INTEGER] / 2[INTEGER] AS a, a{r}#21 + 3[INTEGER] AS b]]
     *     \_EsRelation[test][_meta_field{f}#36, emp_no{f}#30, first_name{f}#31, ..]
     * }

     */
    public void testIsNotNullConstraintForAliasedExpressions() {
        var plan = optimizedPlan("""
            from test
            | eval x = emp_no / 10
            | eval y = x + salary
            | eval z = y / 4
            | eval w = z * 2 + 3
            | rename gender as g, salary as s
            | eval a = (s + 4) / 2
            | eval b = a + 3
            | stats c = count(b) by w, g
            """);

        var limit = as(plan, Limit.class);
        var agg = as(limit.child(), Aggregate.class);
        assertThat(Expressions.names(agg.aggregates()), contains("c", "w", "g"));
        var eval = as(agg.child(), Eval.class);
        var from = as(eval.child(), EsRelation.class);
    }

    /**
     * Expects
     *
{@code
     * Limit[1000[INTEGER]]
     * \_Aggregate[[],[SPATIALCENTROID(location{f}#9) AS centroid]]
     *   \_EsRelation[airports][abbrev{f}#5, location{f}#9, name{f}#6, scalerank{f}..]
     * }

     */
    public void testSpatialTypesAndStatsUseDocValues() {
        var plan = planAirports("""
            from test
            | stats centroid = st_centroid_agg(location)
            """);

        var li


e;
  top: 0;

  &.error {
    background-color: $content-banner-error-bg;
    opacity: $content-banner-error-opacity;
    height: $content-banner-error-height;
    line-height: $content-banner-error-height;

    .content-banner-close {
      line-height: $content-banner-error-height;
      &:before {
        line-height: $content-banner-error-height;
      }
    }
  }
  &.info {
    background-color: $content-banner-info-bg;
    opacity: $content-banner-opacity;
    height: $content-banner-height;
    line-height: $content-banner-height;

    .content-banner-close {
      line-height: $content-banner-height;
      &:before {
        line-height: $content-banner-height;
      }
    }
  }
  .content-banner-text {
    @include transition(opacity 500ms linear) ;
    position: absolute;
    top: 0;
    right: ($button-padding * 2) + 5px + 12px;
    left: ($button-padding * 2) + 5px + 12px;
    text-align: center;
    &.active {
      opacity: 1;
    }
    &:not(.active){
      opacity: 0;
    }
  }
  .content-banner-close {
    position: absolute;
    right: 5px;
    top: 0;
    padding: 0 $button-padding;
    height: 100%;
    min-height: 0;
    color: white;
  }
}

.content-banner-transition-vertical {
  @include transition-transform(linear 250ms);
  @include translate3d(0, -100%, 0);
}

.content-banner-transition-fade {
  @include transition(opacity 400ms linear) ;
  opacity: 0;
}

.content-banner-in {
  @include translate3d(0, 0, 0);
  opacity: $content-banner-opacity;
}/* The standard CSS for doxygen 1.8.10 */

body, table, div, p, dl {
	font: 400 14px/22px Roboto,sans-serif;
}

body
{
	margin:0px;
	padding:0px;
	background-color:#bf6000;
	background-repeat:no-repeat;
	background-position:center center;
	background-attachment:fixed;
	min-height:1200px;
	overflow:auto;
}

/* @group Heading Levels */

h1.groupheader {
	color:#bf6000;
	font-size: 150%;
}

.title {
	color:#bf6000;
	font: 400 14px/28px Roboto,sans-serif;
	font-size: 150%;
	font-weight: bold;
	margin: 10px 2px;
}

h2.groupheader {
	border-bottom: 1px solid #bf6000;
	color:#bf6000;
	font-size: 150%;
	font-weight: normal;
	margin-top: 1.75em;
	padding-top: 8px;
	padding-bottom: 4px;
	width: 100%;
}

h3.groupheader {
	font-size: 100%;
}

h1, h2, h3, h4, h5, h6 {
	-webkit-transition: text-shadow 0.5s linear;
	-moz-transition: text-shadow 0.5s linear;
	-ms-transition: text-shadow 0.5s linear;
	-o-transition: text-shadow 0.5s linear;
	transition: text-shadow 0.5s linear;
	margin-right: 15px;
}

h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
	text-shadow: 0 0 15


local spellfixes = {
	ALfred = "Alfred",
	Brwoser = "Browser",
	Markdwon = "Markdown",
	THe = "The",
	ahve = "have",
	awiat = "await",
	brwoser = "browser",
	btu = "but",
	cant = "can't",
	choer = "chore",
	chroe = "chore",
	cleint = "client",
	cleitn = "client",
	curosr = "cursor",
	defualt = "default",
	dispaly = "display",
	doesnt = "doesn't",
	doestn = "doesn't",
	dont = "don't",
	dwon = "down",
	eror = "error",
	esle = "else",
	fales = "false",
	fasle = "false",
	lwo = "low",
	fiel = "file",
	fiels = "files",
	flase = "false",
	fo = "of",
	fodler = "folder",
	fro = "for",
	gerne = "genre",
	hihglight = "highlight",
	htokey = "hotkey",
	htokeys = "hotkeys",
	hwo = "how",
	ignroe = "ignore",
	iocn = "icon",
	jsut = "just",
	keybaord = "keyboard",
	lien = "line",
	locla = "local",
	markdwon = "markdown",
	mcuh = "much",
	mroe = "more",
	msot = "most",
	nromal = "n


,
    pub(crate) last_vote: Vote,
    #[serde(skip)]
    // The blockhash used in the last vote transaction, may or may not equal the
    // blockhash of the voted block itself, depending if the vote slot was refreshed.
    // For instance, a vote for slot 5, may be refreshed/resubmitted for inclusion in
    //  block 10, in  which case `last_vote_tx_blockhash` equals the blockhash of 10, not 5.
    pub(crate) last_vote_tx_blockhash: Hash,
    pub(crate) last_timestamp: BlockTimestamp,
    #[serde(skip)]
    // Restored last voted slot which cannot be found in SlotHistory at replayed root
    // (This is a special field for slashing-free validator restart with edge cases).
    // This could be emptied after some time; but left intact indefinitely for easier
    // implementation
    // Further, stray slot can be stale or not. `Stale` here means whether given
    // bank_forks (=~ ledger) lacks the slot or not.
    pub(crate) stray_restored_slot: Option<Slot>,
    #[serde(skip)]
    pub(crate) last_switch_threshold_check: Option<(Slot, SwitchForkDecision)>,
}

#[frozen_abi(digest = "CxwFFxKfn6ez6wifDKr5WYr3eu2PsWUKdMYp3LX8Xj52")]
#[derive(Default, Clone, Serialize, Deserialize, Debug, PartialEq, Eq, AbiExample)]
pub struct SavedTower1_7_14 {
    pub(crate) signature: Signature,
    pub(crate) data: Vec<u8>,
    #[serde(skip)]
    pub(crate) node_pubkey: Pubkey,
}

impl SavedTower1_7_14 {
    pub fn new<T: Signer>(tower: &Tower1_7_14, keypair: &T) -> Result<Self, TowerError> {
        let node_pubkey = keypair.pubkey();
        if tower.node_pubkey != node_pubkey {
            return Err(TowerError::WrongTower(format!(
                "node_pubkey is {:?} but found tower for {:?}",
                node_pubkey, tower.node_pubkey
            )));
        }

        let data = bincode::serialize(tower)?;
        let signature = keypair.sign_message(&data);
        Ok(Self {
            signature,
            data,
            node_pubkey,
        })
    }
}
use std::os::unix::prelude::*;
use tempfile::tempfile;

use nix::fcntl;
use nix::errno::Errno;
use nix::pty::openpty;
use nix::sys::termios::{self, LocalFlags, OutputFlags, tcgetattr};
use nix::unistd::{read, write, close};

/// Helper function analogous to `std::io::Write::write_all`, but for `RawFd`s
fn write_all(f: RawFd, buf: &[u8]) {
    let mut len = 0;
    while len < buf.len() {
        len += write(f, &buf[len..]).unwrap();
    }
}

// Test tcgetattr on a terminal
#[test]
fn test_tcgetattr_pty() {
    // openpty uses ptname(3) internally
    let _m = crate::PTSNAME_MTX.lock().expect("Mutex got poisoned by another test");

    let pty = openpty(None, None).expect("openpty failed");
    assert!(termios::tcgetattr(pty.slave).is_ok());
    close(pty.master).expect("closing the master failed");
    close(pty.slave).expect("closing the slave failed");
}

// Test tcgetattr on something that isn't a terminal
#[test]
fn test_tcgetattr_enotty()


er directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(FeijoapolygonrollupmanagerVerifySequencesMultiProof)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(FeijoapolygonrollupmanagerVerifySequencesMultiProof)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *FeijoapolygonrollupmanagerVerifySequencesMultiProofIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *FeijoapolygonrollupmanagerVerifySequencesMultiProofIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// FeijoapolygonrollupmanagerVerifySequencesMultiProof represents a VerifySequencesMultiProof event raised by the Feijoapolygonrollupmanager contract.
type FeijoapolygonrollupmanagerVerifySequencesMultiProof struct {
	Aggregator common.Address
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterVerifySequencesMultiProof is a free log retrieval operation binding the contract event 0x73520b4a8035df0a5543b7c7d63fcb1c3d68d80bd9dce27299f3e03faaf4d7d6.
//
// Solidity: event VerifySequencesMultiProof(address indexed aggregator)
func (_Feijoapolygonrollupmanager *FeijoapolygonrollupmanagerFilterer) FilterVerifySequencesMultiProof(opts *bind.FilterOpts, aggregator []common.Address) (*FeijoapolygonrollupmanagerVerifySequencesMultiProofIterator, error) {

	var aggregatorRule []interface{}
	for _, aggregatorItem := range aggregator {
		aggregatorRule = append(aggregatorRule, aggregatorItem)
	}

	logs, sub, err := _Feijoapolygonrollupmanager.contract.FilterLogs(opts, "VerifySequencesMultiProof", aggregatorRule)
	if err != nil {
		return nil, err
	}
	return &FeijoapolygonrollupmanagerVerifySequencesMultiProofIterator{contract: _Feijoapolygonrollupmanager.contract, event: "VerifySequencesMultiProof", logs: logs, sub: sub}, nil
}

// WatchVerifySequencesMultiProof is a free log subscription operation binding the contract event 0x73520b4a8035df0a5543b7c7d63fcb1c3d68d80bd9dce27299f3e03faaf4d7d6.
//
// Solidity: event VerifySequencesMultiProof(address indexed aggregator)
func (_Feijoapolygonrollupmanager *FeijoapolygonrollupmanagerFilterer) WatchVerifySequencesMultiProof(opts *bind.WatchOpts, sink chan<- *FeijoapolygonrollupmanagerVerifySequencesMultiProof, aggregator []common.Address) (event.Subscription, error) {

	var aggregatorRule []interface{}
	for _, aggregatorItem := range aggregator {
		aggregatorRule = append(aggregatorRule, aggregatorItem)
	}

	logs, sub, err := _Feijoapolygonrollupmanager.contract.WatchLogs(opts, "VerifySequencesMultiProof", aggregatorRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {


 the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
  </p>
 </body>
</html>
<html>
 <head>
  <title>
   给全体共产党员的紧急呼吁 - 一个共产党员 - 1967-2-0 - CCRD 中国当代政治运动史数据库
  </title>
  <link href="../../../../Emblem_of_the_PCP-Shining_Path.svg.ico" rel="icon" type="image/x-icon"/>
 </head>
 <body>
  <meta content="给全体共产党员的紧急呼吁" property="title"/>
  <meta content="1967-2-0" property="date"/>
  <meta content="一个共产党员" property="authors"/>
  <script type="application/ld+json">
   {"title": "\u7ed9\u5168\u4f53\u5171\u4ea7\u515a\u5458\u7684\u7d27\u6025\u547c\u5401", "date": "1967-2-0", "authors": ["\u4e00\u4e2a\u5171\u4ea7\u515a\u5458"], "contents": [{"text": "\u7ed9\u5168\u4f53\u5171\u4ea7\u515a\u5458\u7684\u7d27\u6025\u547c\u5401", "type": "title"}, {"text": ["\u4e00\u4e2a\u5171\u4ea7\u515a\u5458"], "type": "authors"}, {"text": "\u4e2d\u56fd\u5171\u4ea7\u515a\u9886\u5bfc\u4e2d\u56fd\u4eba\u6c11\u5df2\u7ecf\u8fc7\u51e0\u5341\u5e74\u7684\u82f1\u52c7\u594b\u6218\uff0c\u7ec8\u4e8e\u5728\u4e00\u4e5d\u56db\u4e5d\u5e74\u89e3\u653e\u4e86\u5168\u4e2d\u56fd\uff0c\u63a8\u7ffb\u4e86\u538b\u5728\u4e2d\u56fd\u4eba\u6c11\u5934\u4e0a\u7684\u4e09\u5ea7\u5927\u5c71\u3002\u4ee4\u4eba\u96be\u4ee5\u7406\u89e3\u7684\u662f\uff1a\u5efa\u56fd\u5341\u4e03\u5e74\u6765\uff0c\u4f1f\u5927\u7684\u4e2d\u56fd\u5171\u4ea7\u515a\u4eca\u5929\u6b63\u5904\u5728\u6c34\u6d


 }

    /// Converts this address to an [`IPv4` address]. Returns [`None`] if this address is
    /// neither IPv4-compatible or IPv4-mapped.
    ///
    /// ::a.b.c.d and ::ffff:a.b.c.d become a.b.c.d
    ///
    /// [`IPv4` address]: Ipv4Addr
    ///
    /// # Examples
    ///
    /// ```
    /// use std::net::{Ipv4Addr, Ipv6Addr};
    ///
    /// assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).to_ipv4(), None);
    /// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).to_ipv4(),
    ///            Some(Ipv4Addr::new(192, 10, 2, 255)));
    /// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4(),
    ///            Some(Ipv4Addr::new(0, 0, 0, 1)));
    /// ```
    #[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")]
    #[stable(feature = "rust1", since = "1.0.0")]
    #[inline]
    pub const fn to_ipv4(&self) -> Option<Ipv4Addr> {
        if let [0, 0, 0, 0, 0, 0 | 0xffff, ab, cd] = self.segments() {
            let [a, b] = ab.to_be_bytes();
            let [c, d] = cd.to_be_bytes();
            Some(Ipv4Addr::new(a, b, c, d))
        } else {
            None
        }
    }

    /// Returns the sixteen eight-bit integers the IPv6 address consists of.
    ///
    /// ```
    /// use std::net::Ipv6Addr;
    ///
    /// assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).octets(),
    ///            [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
    /// ```
    #[rustc_const_stable(feature = "const_ipv6", since = "1.32.0")]
    #[stable(feature = "ipv6_to_octets", since = "1.12.0")]
    #[inline]
    pub const fn octets(&self) -> [u8; 16] {
        self.inner.s6_addr
    }
}

/// Write an Ipv6Addr, conforming to the canonical style described by
/// [RFC 5952](https://tools.ietf.org/html/rfc5952).
#[stable(feature = "rust1", since = "1.0.0")]
impl fmt::Display for Ipv6Addr {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // If there are no alignment requirements, write out the IP address to
        // f. Otherwise, write it to a local buffer, then use f.pad.
        if f.precision().is_none() && f.width().is_none() {
            let segments = self.segments();

            // Special case for :: and ::1; otherwise they get written with the
            // IPv4 formatter
            if self.is_unspecified() {
                f.write_str("::")
            } else if self.is_loopback() {
                f.write_str("::1")
            } else if let Some(ipv4) = self.to_ipv4() {
                match segments[5] {
                    // IPv4 Compatible address
                    0 => write!(f, "::{}", ipv4),
                    // IPv4 Mapped address


* @return Whether the settleInfo field is set.
     */
    @java.lang.Override
    public boolean hasSettleInfo() {
      return settleInfo_ != null;
    }
    /**
     * .SalvageEscortSettleInfo settle_info = 10;
     * @return The settleInfo.
     */
    @java.lang.Override
    public emu.grasscutter.net.proto.SalvageEscortSettleInfoOuterClass.SalvageEscortSettleInfo getSettleInfo() {
      return settleInfo_ == null ? emu.grasscutter.net.proto.SalvageEscortSettleInfoOuterClass.SalvageEscortSettleInfo.getDefaultInstance() : settleInfo_;
    }
    /**
     * .SalvageEscortSettleInfo settle_info = 10;
     */
    @java.lang.Override
    public emu.grasscutter.net.proto.SalvageEscortSettleInfoOuterClass.SalvageEscortSettleInfoOrBuilder getSettleInfoOrBuilder() {
      return getSettleInfo();
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (galleryId_ != 0) {
        output.writeUInt32(7, galleryId_);
      }
      if (settleInfo_ != null) {
        output.writeMessage(10, getSettleInfo());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (galleryId_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, galleryId_);
      }
      if (settleInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getSettleInfo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof emu.grasscutter.net.proto.SalvageEscortSettleNotifyOuterClass.SalvageEscortSettleNotify)) {
        return super.equals(obj);
      }
      emu.grasscutter.net.proto.SalvageEscortSettleNotifyOuterClass.SalvageEscortSettleNotify other = (emu.grasscutter.net.proto.SalvageEscortSettleNotifyOuterClass.SalvageEscortSettleNotify) obj;

      if (getGalleryId()
          != other.getGalleryId()) return false;
      if (hasSettleInfo() != other.hasSettleInfo()) return false;
      if (hasSettleInfo()) {
        if (!getSettleInfo()
            .equals(other.getSettleInfo())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + GALLERY_ID_FIELD_NUMBER;
      hash = (53 * hash) + getGalleryId();
      if (hasSettleInfo()) {
        hash = (37 * hash) + SETTLE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getSettleInfo().hashCode();
      }
      hash = (29 * hash) + unknownFields.


hysical)
				{
					final Ability A=((Physical)host).fetchEffect("Poison_Rotten");
					if(A!=null)
						((Physical)host).delEffect(A);
				}
			}
			else
			if(host instanceof Container)
			{
				final List<Item> V=((Container)host).getDeepContents();
				for(int f=0;f<V.size();f++)
				{
					if(V.get(f) != null)
					{
						if(V.get(f) instanceof Decayable)
							((Decayable)V.get(f)).setDecayTime(0);
						final Ability A=V.get(f).fetchEffect("Poison_Rotten");
						if(A!=null)
							V.get(f).delEffect(A);
					}
				}
			}
		}
	}

	public void setRot(final Item I)
	{
		if(((I instanceof Decayable)&&(((Decayable)I).decayTime()==0))
		&&(I.owner()!=null)
		&&(I.fetchEffect("Poison_Rotten")==null))
		{
			long newTime=0;
			switch(I.material()&RawMaterial.MATERIAL_MASK)
			{
			case RawMaterial.MATERIAL_FLESH:
			{
				newTime=
				System.currentTimeMillis()+(
				   CMProps.getTickMillis()
					*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY)
				);
				break;
			}
			case RawMaterial.MATERIAL_VEGETATION:
			{
				newTime=
				System.currentTimeMillis()+(
				CMProps.getTickMillis()
				*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY)
				*5);
				break;
			}
			}
			if(I instanceof Drink)
			{
				switch(((Drink)I).liquidType())
				{
				case RawMaterial.RESOURCE_BLOOD:
					newTime=
						System.currentTimeMillis()+(
						CMProps.getTickMillis()
						*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY));
					break;
				case RawMaterial.RESOURCE_MILK:
					newTime=
						System.currentTimeMillis()+(
						CMProps.getTickMillis()
						*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY)
						*5);
					break;
				}
			}
			switch(I.material())
			{
			case RawMaterial.RESOURCE_BLOOD:
				newTime=
					System.currentTimeMillis()+(
					CMProps.getTickMillis()
					*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY));
				break;
			case RawMaterial.RESOURCE_MILK:
				newTime=
					System.currentTimeMillis()+(
					CMProps.getTickMillis()
					*CMProps.getIntVar(CMProps.Int.TICKSPERMUDDAY)
					*5);
				break;
			case RawMaterial.RESOURCE_HERBS:
			case RawMaterial.RESOURCE_WAX:
			case RawMaterial.RESOURCE_COFFEEBEANS:
			case RawMaterial.RESOURCE_SEAWEED:
			case RawMaterial.RESOURCE_SUGAR:
			case RawMaterial.RESOURCE_COCOA:
			case RawMaterial.RESOURCE_MUSHROOMS:
			case RawMaterial.RESOURCE_FUNGUS:
			case RawMaterial.RESOURCE_VINE:
			case RawMaterial.RESOURCE_FLOWERS:
			case RawMaterial.RESOURCE_NUTS:
			case RawMaterial.RESOURCE_CRACKER:
			case RawMaterial.RESOURCE_PIPEWEED:
			case RawMaterial.RESOURCE_GARLIC:
			case RawMaterial.RESOURCE_SOAP:
			case RawMaterial.RESOURCE_ASH:
				newTime=0;
				break;
			}
			if(I instanceof Decayable)
				((Decayable)I).setDecayTime(newTime);
		}
		if((((Decayable)I).decayTime()>0)
		&&(System.currentTimeMillis()>((Decay


this.binaryExpression((a, b): any => a > b)
      break
    }
    case I.EQ: {
      this.binaryExpression((a, b): any => a === b)
      break
    }
    case I.NE: {
      this.binaryExpression((a, b): any => a !== b)
      break
    }
    case I.WEQ: {
      // tslint:disable-next-line: triple-equals
      this.binaryExpression((a, b): any => a == b)
      break
    }
    case I.WNE: {
      // tslint:disable-next-line: triple-equals
      this.binaryExpression((a, b): any => a != b)
      break
    }
    case I.LE: {
      this.binaryExpression((a, b): any => a <= b)
      break
    }
    case I.GE: {
      this.binaryExpression((a, b): any => a >= b)
      break
    }
    case I.ADD: {
      this.binaryExpression((a, b): any => a + b)
      break
    }
    case I.SUB: {
      this.binaryExpression((a, b): any => a - b)
      break
    }
    case I.MUL: {
      this.binaryExpression((a, b): any => a * b)
      break
    }
    case I.DIV: {
      this.binaryExpression((a, b): any => a / b)
      break
    }
    case I.MOD: {
      this.binaryExpression((a, b): any => a % b)
      break
    }
    case I.AND: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a & b)
      break
    }
    case I.OR: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a | b)
      break
    }
    case I.XOR: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a ^ b)
      break
    }
    case I.SHL: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a << b)
      break
    }
    case I.SHR: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a >> b)
      break
    }
    case I.ZSHR: {
      // tslint:disable-next-line: no-bitwise
      this.binaryExpression((a, b): any => a >>> b)
      break
    }
    case I.LG_AND: {
      this.binaryExpression((a, b): any => a && b)
      break
    }
    case I.LG_OR: {
      this.binaryExpression((a, b): any => a || b)
      break
    }
    case I.INST_OF: {
      this.binaryExpression((a, b): any => {
        return a instanceof b
      })
      break
    }
    case I.IN: {
      this.binaryExpression((a, b): any => {
        return a in b
      })
      break
    }
    case I.ALLOC: {
      const dst = this.nextOperant()
      this.getReg(dst)
      break
    }
    case I.PLUS: {
      this.uniaryExpression((val: any): any => +val)
      break
    }
    case I.MINUS: {
      this.uniaryExpression((val: any): any => -val)
      break
    }
    case I.VOID: {
      // tslint:disable-next-line: no-unused-expression
      this.uniaryExpression((val: any): any => void val)
      break
    }
    case I.NOT: {
      // tslint:disable-next-line: no-bitwise
      this.uniaryExpression((val: any): any => ~val)
      break
    }
    case I.NEG: {
      // tslin


Euid(uint32(gid)).WithSuid(uint32(gid)).WithFsuid(uint32(gid)).
		WithGid(0).WithEgid(uint32(gid)).WithSgid(uint32(gid)).WithFsgid(uint32(gid))
	procExecSetgidNoRootChecker := ec.NewProcessChecker().WithUid(uint32(gid)).
		WithBinary(sm.Full(testSuid)).WithProcessCredentials(setgidNonRootCreds).WithBinaryProperties(bpSetgidNoRoot)
	execSetgidNoRootChecker := ec.NewProcessExecChecker("exec").WithProcess(procExecSetgidNoRootChecker)
	procExitSetgidNoRootChecker := ec.NewProcessChecker().WithUid(uint32(gid)).
		WithBinary(sm.Full(testSuid)).WithProcessCredentials(setgidNonRootCreds).WithBinaryProperties(nil)
	exitSetgidNoRootChecker := ec.NewProcessExitChecker("exit").WithProcess(procExitSetgidNoRootChecker)

	if err := exec.Command(testSuid).Run(); err != nil {
		t.Fatalf("Failed to execute secound round suid '%s' binary: %s\n", testSuid, err)
	}

	checker := ec.NewUnorderedEventChecker(execNoGidsCredsChangedChecker, execSetgidRootChecker, exitSetgidRootChecker, execSetgidNoRootChecker, exitSetgidNoRootChecker)
	err = jsonchecker.JsonTestCheck(t, checker)
	require.NoError(t, err)
}

// Test running with different combinations of setuid bit set
//  1. executes a set-user-ID to non root, it is set to arbitrary value
//     to assert that binary execution detects the setuid bit but we do
//     not report as a privilege changed execution as the target user
//     is not root.
//  2. executes a set-user-ID to root binary asserting that we detect
//     the setuid bit set + the privileges changed due to the setuid bit
//     being set to root.
func TestExecProcessCredentialsSetuidChanges(t *testing.T) {
	var doneWG, readyWG sync.WaitGroup
	defer doneWG.Wait()

	ctx, cancel := context.WithTimeout(context.Background(), tus.Conf().CmdWaitTime)
	defer cancel()

	obs, err := observertesthelper.GetDefaultObserver(t, ctx, tus.Conf().TetragonLib, observertesthelper.WithMyPid())
	if err != nil {
		t.Fatalf("Failed to run observer: %s", err)
	}

	testBin := testutils.RepoRootPath("contrib/tester-progs/nop")
	// The drop-privileges is a helper binary that drops privileges so we do not
	// drop it inside this test which will break the test framework.
	testDrop := testutils.RepoRootPath("contrib/tester-progs/drop-privileges")
	testSu, err := exec.LookPath("su")
	if err != nil {
		t.Skip("Could not find 'su' binary skipping")
	}
	// We should be able to create suid on local mount point
	// This binary will have setuid set to non root.
	testSuid := testutils.RepoRootPath("contrib/tester-progs/suidnop")
	if err := testutils.CopyFile(testSuid, testBin, 0755|os.ModeSetuid|os.ModeSetgid); err != nil {
		t.Fatalf("Failed to copy binary: %s", err)
	}
	t.Cleanup(func() {
		err := os.Remove(testSuid)
		if err != nil {
			t.Logf("Error failed to cleanup '%s'", testSuid)
		}
	})

	observertesthelper.LoopEvents(ctx, t, &doneWG, &readyWG, obs)
	readyWG.Wait()

	gid := 1879048188
	if err := os.Chown(testSuid, gid, gid); er


import util

class SearchProblem:

    def getStartState(self):

        util.raiseNotDefined()

    def isGoalState(self, state):

        util.raiseNotDefined()

    def getSuccessors(self, state):
        util.raiseNotDefined()

    def getCostOfActions(self, actions):
        util.raiseNotDefined()

def tinyMazeSearch(problem):
    from game import Directions
    s = Directions.SOUTH
    w = Directions.WEST
    return [s, s, w, s, w, w, s, w]

def nullHeuristic(state, problem=None):
    """
    A heuristic function estimates the cost from the current state to the nearest
    goal in the provided SearchProblem.  This heuristic is trivial.
    """
    return 0

def aStarSearch(problem: SearchProblem, heuristic=nullHeuristic):
    "*** 1번문제 CODE ***"
    start_state = problem.getStartState()
    priority_queue = util.PriorityQueue()
    priority_queue.push((start_state, [], 0), 0)

    visited = set()

    while not priority_queue.isEmpty():
        current_state, actions, cost = priority_queue.pop()

        if problem.isGoalState(current_state):
            return actions

        if current_state not in visited:
            visited.add(current_state)
            for next_state, action, step_cost in problem.getSuccessors(current_state):
                next_cost = cost + step_cost
                next_heuristic = heuristic(next_state, problem)
                priority = next_cost + next_heuristic
                priority_queue.push((next_state, actions + [action], next_cost), priority)

    return []

# Abbreviations
astar = aStarSearch


esult<String, Error> {
    let mut buffer = [0u8; 512];
    let mut op = Operation::GetCmdLine(GetCmdLineArgs {
        ptr: &mut buffer[0] as *mut _,
        size: 512,
    });
    call_host(&mut op)?;

    if let Operation::GetCmdLine(GetCmdLineArgs { size, .. }) = op {
        Ok(String::from_utf8((&buffer[..size]).to_vec()).unwrap())
    } else {
        unreachable!();
    }
}
<filename>src/day13.rs
pub fn solve_floor() {
    let mut data = include_str!("../resources/13-1.txt").lines();
    let target: i32 = data.next().unwrap().parse().unwrap();
    let (bus_id, mins_to_wait) = data.next().unwrap()
                     .split(',')
                     .filter(|&ch| ch != "x")
                     .map(|ch| ch.parse().unwrap())
                     .map(|num: f32| {
                         let nearest_departure:f32 = target as f32 / num;
                         (num as i32, (nearest_departure.ceil() * num) as i32 - target)
                     })
                     .min_by(|(_, prev_time_to_wait), (_, time_to_wait)| {
                         prev_time_to_wait.cmp(time_to_wait)
                     }).unwrap();
    println!("{}", bus_id * mins_to_wait);
}

// This solution only works on a 64-bit machine.
pub fn solve_basement() {
    let data: Vec<(usize, usize)> = include_str!("../resources/13-1.txt").lines()
        .last().unwrap()
        .split(',')
        .enumerate()
        .filter(|&(_idx, ch)| ch != "x")
        .map(|(idx, ch)| (idx, ch.parse().unwrap()))
        .collect();

    let mut cur_interval = data[0].1;
    let mut i = 1;
    let mut x = cur_interval;

    // Here's my best attempt at explaining this: by experimentation the numbers repeat the cycle
    // every x * y times. So if your numbers are 7 and 13, they will repeat every 7 * 13 times (after
    // the first time.)  If they are 7, 13, and 59, they will repeat every 7 * 13 * 59 times.
    // So only increment on those intervals til you find the next intersection. Repeat til done.
    loop {
        let (cur_position, cur_number) = data[i];
        if (x + cur_position) % cur_number == 0 {
            cur_interval *= cur_number;
            i += 1;
            if i >= data.len() {
                break;
            }
        }

        x += cur_interval
    }

    println!("{}", x)
}

use crate::{
    misc::{confirm, exit_msg, warning},
    proc::execute,
};
use std::path::Path;

pub fn init(path: &str) {
    let git_dir_path = format!("{}/.git", path);
    if Path::new(&git_dir_path).exists() {
        let string = format!("Path `{}` already has a `.git` directory!", path);
        warning(&string);
        if confirm("Reinitialize") {
            execute("git init");
        } else {
            exit_msg(1);
        }
    } else {
        execute("git init");
    }
}
struct Vector2D(u64, u64);

struct Time(u64);
struct Velocity(Vector2D);
struct Point(Vector2D);

trait Flying {
    fn get_location(&self) -> Point;
}

<gh_stars>0
use rand;

use mutation::Mutation;
use utility::RngExt;

#[derive(Copy, Clone)]
pub struct Twors;

impl Twors {
    pub fn new() -> Self {
        Twors
    }
}

impl


import torch
import torch.nn.functional as F
import pdb

def init_loss(pred_init_cost: torch.Tensor, d_gt: torch.Tensor, maxdisp, beta=1):
    """
    Initialization loss, HITNet paper eqt(10
    :param pred_init_cost:
    :param d_gt:
    :param beta:
    :return: init loss [B*1*H*W]
    """
    cost_gt = subpix_cost(pred_init_cost, d_gt, maxdisp)
    cost_nm = torch.gather(pred_init_cost, 1, get_non_match_disp(pred_init_cost, d_gt))
    loss = cost_gt + F.relu(beta - cost_nm)
    # pdb.set_trace()
    return loss

def subpix_cost(cost: torch.Tensor, disp: torch.Tensor, maxdisp: int):
    """
    phi, e.g. eqt(9) in HITNet paper
    :param cost:
    :param disp:
    :return:
    """
    # pdb.set_trace()
    disp[disp >= maxdisp - 1] = maxdisp - 2
    disp[disp < 0] = 0
    disp_floor = disp.floor()
    sub_cost = (disp - disp_floor) * torch.gather(cost, 1, disp_floor.long()+1) + (disp_floor + 1 - disp) * torch.gather(cost, 1, disp_floor.long())
    # pdb.set_trace()
    return sub_cost

def get_non_match_disp(pred_init_cost: torch.Tensor, d_gt: torch.Tensor):
    """
    HITNet paper, eqt (11)
    :param pred_init_cost: B, D, H, W
    :param d_gt: B, 1, H, W
    :return: LongTensor: min_non_match_disp: B, 1, H, W
    """
    B, D, H, W = pred_init_cost.size()
    disp_cand = torch.arange(0, D, step=1, device=d_gt.device).view(1, -1, 1, 1).repeat(B, 1, H, W).float()
    match_disp_lower_bound = d_gt - 1.5
    match_disp_upper_bound = d_gt + 1.5
    INF = torch.Tensor([float("Inf")]).view(1, 1, 1, 1).repeat(B, D, H, W).to(d_gt.device)
    tmp_cost = torch.where((disp_cand < match_disp_lower_bound) | (disp_cand > match_disp_upper_bound), pred_init_cost, INF)
    # pdb.set_trace()
    __, min_non_match_disp = torch.min(tmp_cost, dim=1, keepdim=True)
    # pdb.set_trace()
    return min_non_match_disp

#
# if __name__ == '__main__':
#     cost = torch.rand(1, 12, 2, 2)
#     d_gt = torch.rand(1, 1, 2, 2)*4
#     output_cost = init_loss(cost, d_gt)
#     pdb.set_trace()


PartitionInfoProtocolGuid,
        NULL,
        (VOID **) &PartitionInfoInterface
      );
    }
  }

  if (EFI_ERROR(Status)) {
    DEBUG ((
      DEBUG_VERBOSE,
      "No partition info protocol, using Legacy scan\n"
      ));
    LegacyScan = TRUE;
  }

  //
  // Install Driver Binding Instance
  //
  Status = EfiLibInstallDriverBindingComponentName2 (
    ImageHandle,
    SystemTable,
    &gApfsDriverLoaderDriverBinding,
    ImageHandle,
    &gApfsDriverLoaderComponentName,
    &gApfsDriverLoaderComponentName2
    );

  return Status;
}


<Input>() -> impl Parser<FeaRsStream<Input>, Output = ScriptTag>
    where Input: Stream<Token = u8, Position = SourcePosition>,
          Input::Error: ParseError<Input::Token, Input::Range, Input::Position>
{
    tag_storage()
        .map(ScriptTag)
}

pub(crate) fn script<Input>() -> impl Parser<FeaRsStream<Input>, Output = Script>
    where Input: Stream<Token = u8, Position = SourcePosition>,
          Input::Error: ParseError<Input::Token, Input::Range, Input::Position>
{
    literal_ignore_case("script")
        .skip(required_whitespace())
        .with(script_tag())
        .map(Script)
}
<filename>src/traits.rs<gh_stars>1-10
pub trait Trajectory {
    type Point;
    type Time;
    fn position(&self, t: Self::Time) -> Option<Self::Point>;
    fn velocity(&self, t: Self::Time) -> Option<Self::Point>;
    fn acceleration(&self, t: Self::Time) -> Option<Self::Point>;
}
use std::rand::random;
use test::Bencher;
use na::{Vec2, Vec3, Vec4, Vec5, Vec6, DVec, Mat2, Mat3, Mat4, Mat5, Mat6, DMat};

macro_rules! bench_mul_mat(
    ($bh: expr, $t: ty) => {
        {
            let a: $t     = random();
            let mut b: $t = random();

            $bh.iter(|| {
                for _ in range(0u, 1000) {
                    b = a * b;
                }
            })
        }
    }
)

#[bench]
fn bench_mul_mat2(bh: &mut Bencher) {
    bench_mul_mat!(bh, Mat2<f64>)
}

#[bench]
fn bench_mul_mat3(bh: &mut Bencher) {
    bench_mul_mat!(bh, Mat3<f64>)
}

#[bench]
fn bench_mul_mat4(bh: &mut Bencher) {
    bench_mul_mat!(bh, Mat4<f64>)
}

#[bench]
fn bench_mul_mat5(bh: &mut Bencher) {
    bench_mul_mat!(bh, Mat5<f64>)
}

#[bench]
fn bench_mul_mat6(bh: &mut Bencher) {
    bench_mul_mat!(bh, Mat6<f64>)
}

macro_rules! bench_mul_dmat(
    ($bh: expr, $nrows: expr, $ncols: expr) => {
        {
            let a:     DMat<f64> = DMat::new_random($nrows, $ncols);
            let mut b: DMat<f64> = DMat::new_random($nrows, $ncols);

            $bh.iter(|| {
                for _ in range(0u, 1000) {
                    b = a * b;
                }
            })
        }
    }
)

#[bench]
fn bench_mul_dmat2(bh: &mut Bencher) {
    bench_mul_dmat!(bh, 2, 2)
}

#[bench]
fn bench_mul_dmat3(bh: &mut Bencher) {
    bench_mul_dmat!(bh, 3, 3)
}

#[bench]
fn bench_mul_dmat4(bh: &mut Bencher) {
    bench_mul_dmat!(bh, 4, 4)
}

#[bench]
fn bench_mul_dmat5(bh: &mut Bencher) {
    bench_mul_dmat!(bh, 5, 5)
}

#[bench]
fn bench_mul_dmat6(bh: &mut Bencher) {
    bench_mul_d


Changed) {
        throw Exception(
          'RamFileData.fromStream: an non-ending entry of the stream has a different size from its predecessors.',
        );
      } else if (intList.length != usedSubListSize) {
        if (intList.length > usedSubListSize) {
          throw Exception(
            'RamFileData.fromStream: an entry of the stream had a larger size than its predecessors',
          );
        }
        listSizeChanged = true;
      }
      list.add(intList);
    }
    if (usedSubListSize == null) {
      throw Exception('RamFileData.fromStream: usedSubListSize is null');
    }
    return RamFileData._(list, usedSubListSize, fileLength, true);
  }

  RamFileData._(this._content, this._subListSize, this._length, this._readOnly);

  void clear() {
    _content.clear();
  }

  @Deprecated('Visible for testing only')
  List<List<int>> get content => _content;

  @Deprecated('Visible for testing only')
  List<int> readAsBytes() {
    return _content.expand<int>((List<int> x) => x).toList();
  }

  int readIntoSync(Uint8List buffer, int start, int? end) {
    final int usedEnd = math.min(end ?? (start + buffer.length), _length);
    int bufferStartWriteIndex = 0;
    int relativeStart;
    do {
      relativeStart = start + bufferStartWriteIndex;
      final int contentIndex = relativeStart ~/ _subListSize;
      if (contentIndex >= _content.length) {
        break;
      }
      final List<int> contentSubList = _content[contentIndex];
      final int subListStartIndex = relativeStart % _subListSize;
      final int dataLengthToCopy = math.min(
        usedEnd - relativeStart,
        _subListSize - subListStartIndex,
      );
      buffer.setRange(
        bufferStartWriteIndex,
        bufferStartWriteIndex + dataLengthToCopy,
        contentSubList.getRange(
          subListStartIndex,
          subListStartIndex + dataLengthToCopy,
        ),
      );
      bufferStartWriteIndex += dataLengthToCopy;
    } while (relativeStart < usedEnd);
    return usedEnd - start;
  }

  int writeFromSync(List<int> buffer, [int start = 0, int? end]) {
    if (_readOnly) {
      throw Exception('Cannot write to read-only RAM file data');
    }
    final int usedStart = start;
    final int usedEnd = end ?? (start + buffer.length);
    int bufferStartWriteIndex = 0;
    int relativeStart;
    do {
      relativeStart = usedStart + bufferStartWriteIndex;
      final int contentIndex = relativeStart ~/ _subListSize;
      while (contentIndex >= _content.length) {
        _content.add(Uint8List(_subListSize));
      }
      final List<int> contentSubList = _content[contentIndex];
      final int subListStartIndex = relativeStart % _subListSize;
      final int dataLengthToCopy = math.min(
        usedEnd - relativeStart,
        _subListSize - subListStartIndex,
      );
      contentSubList.setRange(
        subListStartIndex,
        subListStartIndex + dataLengthToCopy,
        buffer.getRange(
          bufferStartWriteIndex,
          bufferStartWriteIndex + dataLengthToCopy,
        ),
      );
      bufferStartWriteIndex += dataLengthToCopy;
    } while (relativeStart < usedEnd);
    _length = math.max(usedEnd, _length);
    return usedEnd - start;
  }
}
import 'dart:convert';
import 'dart:typed_data';

import '../archive/archive.dart';
import '../archive/archive_


>,
         std::size_t A = 0>
struct CategoryVisitor;

        This is a "single action visitor", meaning it is passed the whole data vector in one call and you must use the single_act_visit() interface.

        This functor categorizes the given column values with unsigned long starting with 0. The result is a vector of integers with the same length as the column. Each unique value in the column has a unique integer associated with it. This could be used to create statistical category columns.

        The constructor takes an unsigned value to represent NaN values. The default is unsigned long value of -1.

    explicit CategoryVisitor(std::size_t nan_val = std::size_t(-1));

        The result is a vector of std::size_t

        T: Column data type.

        I: Index type.

        A: Memory alignment boundary for vectors. Default is system default alignment

static void test_CategoryVisitor()  {

    std::cout << "\nTesting CategoryVisitor{ } ..." << std::endl;

    MyDataFrame df;

    std::vector<unsigned long>  idxvec = <span style='color:


_num]
	b	.LBB50_9
.LBB50_8:                               //   in Loop: Header=BB50_9 Depth=1
	add	x11, x19, w8, uxtb #1
	ldrh	w12, [x11, #16]
	cmp	w12, w9
	b.ne	.LBB50_11
.LBB50_9:                               // =>This Inner Loop Header: Depth=1
	add	w8, w8, #1                      // =1
	cmp	w10, w8, uxtb
	b.ne	.LBB50_8
// %bb.10:                              //   in Loop: Header=BB50_9 Depth=1
	ldrh	w11, [x19, #2]
	mov	w8, wzr
	add	w11, w11, #1                    // =1
	strh	w11, [x19, #2]
	b	.LBB50_8
.LBB50_11:
	strb	w8, [x19, #6]
.LBB50_12:
	ldrh	w10, [x19, #2]
	ldrh	w9, [x20, :lo12:c_ftl_nand_page_pre_blk]
	cmp	w10, w9
	b.hs	.LBB50_17
// %bb.13:
	ldrh	w11, [x19, #4]
	adrp	x13, c_ftl_nand_planes_num
                                        // kill: def $w8 killed $w8 killed $x8 def $x8
	sub	w11, w11, #1                    // =1
	strh	w11, [x19, #4]
	ldrh	w14, [x13, :lo12:c_ftl_nand_planes_num]
	lsl	w13, w12, #10
	mov	w12, w10
	b	.LBB50_15
.LBB50_14:                              //   in Loop: Header=BB50_15 Depth=1
	add	x15, x19, w8, uxtb #1
	ldrsh	w15, [x15, #16]
	cmn	w15, #1                         // =1
	b.ne	.LBB50_18
.LBB50_15:                              // =>This Inner Loop Header: Depth=1
	add	w8, w8, #1                      // =1
	cmp	w14, w8, uxtb
	b.ne	.LBB50_14
// %bb.16:                              //   in Loop: Header=BB50_15 Depth=1
	mov	w8, wzr
	add	w12, w12, #1                    // =1
	strh	w12, [x19, #2]
	b	.LBB50_14
.LBB50_17:
	mov	w20, #65535
	b	.LBB50_21
.LBB50_18:
	orr	w20, w13, w10
	tst	w11, #0xffff
	strb	w8, [x19, #6]
	b.eq	.LBB50_21
// %bb.19:
	cmp	w9, w12, uxth
	b.ne	.LBB50_21
// %bb.20:
	adrp	x0, .L.str.78
	adrp	x1, .L__func__.get_new_active_ppa
	add	x0, x0, :lo12:.L.str.78
	add	x1, x1, :lo12:.L__func__.get_new_active_ppa
	mov	w2, #2817
	bl	sftl_printk
.LBB50_21:
	mov	w0, w20
	ldp	x20, x19, [sp, #16]             // 16-byte Folded Reload
	ldp	x29, x30, [sp], #32             // 16-byte Folded Reload
	hint	#29
	ret
.Lfun


/**
 * Remove the gray background on active links in IE 10.
 */

a {
  color: #1890ff;
  background-color: transparent;
}

/**
 * 1. Remove the bottom border in Chrome 57-
 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 */

abbr[title] {
  text-decoration: underline; /* 2 */
  text-decoration: underline dotted; /* 2 */
  border-bottom: none; /* 1 */
}

/**
 * Add the correct font weight in Chrome, Edge, and Safari.
 */

b,
strong {
  font-weight: bolder;
}

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

code,
kbd,
samp {
  font-size: 1em; /* 2 */
  font-family: monospace; /* 1 */
}

/**
 * Add the correct font size in all browsers.
 */

small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` elements from affecting the line height in
 * all browsers.
 */

sub,
sup {
  position: relative;
  font-size: 75%;
  line-height: 0;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/* Embedded content
   ========================================================================== */

/**
 * Remove the border on images inside links in IE 10.
 */

img {
  border-style: none;
}

/* Forms
   ========================================================================== */

/**
 * 1. Change the font styles in all browsers.
 * 2. Remove the margin in Firefox and Safari.
 */

button,
input,
optgroup,
select,
textarea {
  margin: 0; /* 2 */
  font-size: 100%; /* 1 */
  font-family: inherit; /* 1 */
  line-height: 1.15; /* 1 */
}

/**
 * Show the overflow in IE.
 * 1. Show the overflow in Edge.
 */

button,
input {
  /* 1 */
  overflow: visible;
}

/**
 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 * 1. Remove the inheritance of text transform in Firefox.
 */

button,
select {
  /* 1 */
  text-transform: none;
}

/**
 * Correct the inability to style clickable types in iOS and Safari.
 */

button,
[type='button'],
[type='reset'],
[type='submit'] {
  appearance: button;
}

/**
 * Remove the inner border and padding in Firefox.
 */

button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
  padding: 0;
  border-style: none;
}

/**
 * Restore the focus styles unset by the previous rule.
 */

button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring {
  outline: 1px dotted ButtonText;
}

/**
 * Correct the padding in Firefox.
 */

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

/**
 * 1. Correct the text wrapping in Edge and IE.
 * 2. Correct the color inheritance from `fieldset` elements in IE.
 * 3. Remove the padding so developers are not caught out when they zero out
 *    `fieldset` elements in all browsers.
 */

legend {
  display: table; /* 1 */
  padding: 0; /* 3 */
  max-width: 100%; /* 1 */
  white-space: normal; /* 1 */
  color: inherit; /* 2 */
  box-sizin


 ├──42.【CV项目一图像分割深度学习实战】第二周2.4-选择优化算法和学习率.mp4 45.66M

 ├──43.【CV项目一图像分割深度学习实战】第二周-2.5-调参-总结.mp4 22.57M

 ├──44.【CV项目一图像分割深度学习实战】第二周2.6-U-Net理论课.mp4 533.99M

 ├──45.【CV项目一图像分割深度学习实战】第二周2.7-DeepLabv3理论课.mp4 320.91M

 ├──46.【CV项目一图像分割深度学习实战】第三周-3.1-改进络结构-a.mp4 73.27M

 ├──47.【CV项目一图像分割深度学习实战】第三周-3.1-改进络结构-b.mp4 31.28M

 ├──48.【CV项目一图像分割深度学习实战】第三周-3.1-改进络结构-c.mp4 111.27M

 ├──49.【CV项目一图像分割深度学习实战】第三周-3.1-改进络结构-d.mp4 44.42M

 ├──50.【CV项目一图像分割深度学习实战】第三周-3.2-尝试各种训练.mp4 102.20M

 ├──51.【CV项目一图像分割深度学习实战】第三周-3.3-梯度累积法.mp4 37.13M

 ├──52.【CV项目一图像分割深度学习实战】第三周-3.4-选择模型权重.mp4 55.75M

 ├──53.【CV项目一图像分割深度学习实战】第三周-U-Net理论课进阶-迁移学习.mp4 219.34M

 ├──54.【CV项目一图像分割深度学习实战】第三周-U-Net理论课进阶-注意机制.mp4 476.83M

 ├──55.【CV项目一图像分割深度学习实战】第四周-4.1-数据标注-a.mp4 34.96M

 ├──56.【CV项目一图像分割深度学习实战】第四周-4.1-数据标注-b.mp4 105.25M

 ├──57.【CV项目一图像分割深度学习实战】第四周-4.2-图像增-a.mp4 41.59M

 ├──58.【CV项目一图像分割深度学习实战】第四周-4.2-图像增-b.mp4 93.30M

 ├──59.【CV项目一图像分割深度学习实战】第四周-4.2-图像增-c.mp4 63.82M

 ├──60.【CV项目一图像分割深度学习实战】第四周-4


이 긴 편에 속하는 책으로 남기를 바라는 마음으로 썼다. 빠르게 발전하는 기술을 다루는 글은 대부분 기술의 변화와 함께 빠른 속도로 쓸모 없어진다. 그럼에도 다른 맥락, 다른 장소에서도 유용한 지혜를 담은 책들은 독자들의 기억 속에서 오래도록 버티곤 한다.

누군가에게 이 책이 그런 존재로 남는다면 더할 나위 없겠다.

## 책의 구성

이 책을 완독했을 때, 독자는 다음과 같은 지식을 얻게 될 것이다.

* 최신 자바스크립트 기능
* 자바스크립트 언어 표준의 발전 과정
* 타입스크립트로 실제 프로젝트를 구성하고 배포하는 방법
* 타입스크립트의 기본 개념 및 문법에 대한 탄탄한 이해
* 타입스크립트의 타입 시스템에 대한 깊이 있는 이해
* 타입스크립트 생태계에 대한 이해

앞으로 펼쳐질 책의 구성은 다음과 같다. 책의 진행을 따라가며 자연스레 점차 깊고 넓게 들여다보는 식으로 짜여 있으니, 당장 이 소개가 이해가 가지 않아도 당황하거나 겁먹을 이유는 없다.

먼저 1장부터 4장까지는 타입스크립트의 기초에 대해 소개한다.

* 1장에선 타입스크립트가 무엇인지 소개한다. 타입스크립트란 무엇인지 알아보고, 그 역사와 더불어 왜 타입스크립트를 배워야 하는지에 대한 근거를 제시한다.
* 2장에선 타입스크립트의 기반이 되는 언어, 자바스크립


;
					k++;
					drcI = idx + 1;
					drcP = -fac_0[idx + 1];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
				}
				drcI = idx + resx;
				drcP = -fac_0[idx + n_pix + resx];
				df_dI0[idx] += rc[drcI] * drcP;
				_dr_dI.push_back(SpTr(drcI, idx, drcP));
				k++;
			} else if(y == resy - 1) {
				drcI = idx - resx;
				drcP = fac_0[idx + n_pix - resx];
				df_dI0[idx] += rc[drcI] * drcP;
				_dr_dI.push_back(SpTr(drcI, idx, drcP));
				k++;
				if(x == 0) {
					drcI = idx;
					drcP = -fac_0[idx] + fac_0[idx + n_pix];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
					drcI = idx + 1;
					drcP = -fac_0[idx + 1];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
				} else if(x == resx - 1) {
					drcI = idx - 1;
					drcP = fac_0[idx - 1];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
					drcI = idx;
					drcP = fac_0[idx] + fac_0[idx + n_pix];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
				} else {
					drcI = idx - 1;
					drcP = fac_0[idx - 1];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
					drcI = idx;
					drcP = fac_0[idx + n_pix];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
					drcI = idx + 1;
					drcP = -fac_0[idx + 1];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
				}
			} else {
				drcI = idx - resx;
				drcP = fac_0[idx + n_pix - resx];
				df_dI0[idx] += rc[drcI] * drcP;
				_dr_dI.push_back(SpTr(drcI, idx, drcP));
				k++;
				if(x == 0) {
					drcI = idx;
					drcP = -fac_0[idx];
					df_dI0[idx] += rc[drcI] * drcP;
					_dr_dI.push_back(SpTr(drcI, idx, drcP));
					k++;
					drcI = idx + 1;
					drc


on a.cke_combo_button{border:1px solid #777;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:linear-gradient(to bottom,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;dis


using MasterServerToolkit.Networking;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MasterServerToolkit.MasterServer
{
    public class MatchmakerModule : BaseServerModule
    {
        /// <summary>
        /// List of game providers
        /// </summary>
        public HashSet<IGamesProvider> GameProviders { get; protected set; }

        /// <summary>
        ///
        /// </summary>
        protected SpawnersModule spawnersModule;

        protected override void Awake()
        {
            base.Awake();

            AddOptionalDependency<LobbiesModule>();
            AddOptionalDependency<RoomsModule>();
            AddOptionalDependency<SpawnersModule>();
        }

        public override void Initialize(IServer server)
        {
            GameProviders = new HashSet<IGamesProvider>();

            var roomsModule = server.GetModule<RoomsModule>();
            var lobbiesModule = server.GetModule<LobbiesModule>();
            spawnersModule = server.GetModule<SpawnersModule>();

            if (!spawnersModule)
                logger.Error($"{GetType().Name} was set to use {nameof(SpawnersModule)}, but {nameof(SpawnersModule)} was not found." +
                    $"In this case, you will not be able to get regions list");

            // Dependencies
            if (roomsModule != null)
                AddProvider(roomsModule);

            if (lobbiesModule != null)
                AddProvider(lobbiesModule);

            // Add handlers
            server.RegisterMessageHandler(MstOpCodes.FindGamesRequest, FindGamesRequestHandler);
            server.RegisterMessageHandler(MstOpCodes.GetRegionsRequest, GetRegionsRequestHandler);
        }

        /// <summary>
        /// Add given provider to list
        /// </summary>
        /// <param name="provider"></param>
        public void AddProvider(IGamesProvider provider)
        {
            GameProviders.Add(provider);
        }

        #region INCOMING MESSAGES HANDLERS


="lineno">  315     iterator operator++(int) {

  316       iterator ret(*this);

  317       ++idx_;

  318       if (idx_ == kElementsPerStoredItem) {

  319         ++ptr_;

  320         idx_ = 0;

  321       }

  322       return ret;

  323     }

  324

  325     CUTLASS_HOST_DEVICE

  326     iterator operator--(int) {

  327       iterator ret(*this);

  328       if (!idx_) {

  329         --ptr_;

  330         idx_ = kElementsPerStoredItem - 1;

  331       }

<spa


mente une stat aléatoire pour chaque objet détruit"},
	{"42", "Carte Chaos", "Utiliser cette carte la lance dans la direction où se déplace Isaac#La carte tue instantanément les ennemis ou boss avec lequels elle rentre en contact#La carte ne peut pas tuer Delirium"},
	{"43", "Carte de Crédit", "Rend gratuits tous les objets en vente#Fonctionne sur les coûts en pièces et en PV"},
	{"44", "Carte des Règles", "Donne un indice sur un des secrets du jeu"},
	{"45", "Une Carte Limite Limite", "Couvre la totalité du sol de la salle de cacas {{Poop}}"},
	{"46", "Roi Suicidaire", "Tue Isaac et fait apparaître 10 ressources ou objets dans la salle#Les objets proviennent de la banque d'objets de la salle où se trouve Isaac"},
	{"47", "Carte Chance", "Ouvre toutes les portes de la salle, y compris la majorité des portes spéciales"},
	{"48", "Carte ?", "Utilise l'objet activable d'Isaac sans le décharger"},
	{"49", "Fragment de Dé", "Rejoue tous les objets et ressources présentes dans la salle"},
	{"50", "Appel d'Urgence", "2 mains de {{ColorCyan}}Mom{{ColorWhite}} attrapent un ennemi chacune, leur infligent 40 dégâts et les paralysent"},
	{"51", "Carte Sacrée", "Entoure Isaac d'un bouclier sacré {{HolyMantleSmall}} qui nullifie le prochain dégât subi dans la salle"},
	{"52", "Croissance Colossale", "↑ Dégâts {{ColorLime}}+7#↑ Portée {{ColorLime}}+30#↑ Taille augmentée#Marcher sur les obstacles les détruit#{{Timer}} L'effet dure une salle"},
	{"53", "Rappel Ancestral", "Fait apparaître 3 cartes"},
	{"54", "Marche Temporelle", "↑ Vitesse {{ColorLime}}+0.5#↓ Vitesse des tirs {{ColorError}}-1#Ralentit les ennemis#{{Timer}} L'effet dure une salle"},
}

EID.descriptions[languageCode].tarotClothBuffsAB = {
	[4] = {0.3, 0.6, 1.5, 3}, -- III - The Empress
	[6] = {2, 4}, -- V - The Hierophant
	[7] = {2, 4}, -- VI - The Lovers
	[8] = {6, 12}, -- VII - The Chariot
	[9] = {"Fait apparaître {{ColorShinyPurple}}2{{CR}} cœurs, pièces, bombes et clés"}, -- VIII - Justice
	[11] = {"une machine", "deux machines"}, -- X - Wheel of Fortune
	[12] = {1, 2, 0.3, 0.6, 0.3, 0.6, 5.25, 10.5}, -- XI - Strength
	[14] = {40, 80}, -- XIII - Death
	[15] = {" une ", " 2 ", " machine", " {{CR}}machines", "mendiant démoniaque", "{{CR}}mendiants démoniaques"}, -- XIV - Temperance (+ Greed version)
	[17] = {6, 12}, -- XVI - The Tower
	[20] = {100, 200}, -- XIX - The Sun
	[21] = {"un mendiant", "2 {{ColorWhite}} mendiants"}, -- XX - Judgement
	[23] = {"2", "4"}, -- 2 of Clubs
	[24] = {"2", "4"}, -- 2 of Diamonds
	[25] = {"2",