Property(String propertyName) {
        String res = properties.getProperty(propertyName);
        if (res == null) {
            logger.error("key do not exist:" + propertyName);
            return null;
        }
        return res.trim();
    }

    public static boolean getSplitTag() {
        return Boolean.parseBoolean(getProperty("http.split"));
    }

    public static boolean getZipProperties() {
        return Boolean.parseBoolean(getProperty("http.zip"));
    }

    public static DbConfig getDbProperties() {
        DbConfig dbConfig = new DbConfig();
        String dbType = getProperty("db.type");
        dbConfig.setDbType(DbType.valueOf(dbType));
        dbConfig.setDriver(getProperty("db.driver"));
        dbConfig.setUrl(getProperty("db.url"));
        dbConfig.setUsername(getProperty("db.username"));
        dbConfig.setPassword(getProperty("db.password"));
        dbConfig.setMaxPoolSize("200");
        dbConfig.setMinIdle("20");
        dbConfig.setLeakDetectionThreshold("60000");
        return dbConfig;
    }

    public static int getPortElseDefault() {
        String strPort = getProperty("app.port");
        if (strPort != null) {
            return Integer.parseInt(strPort);
        }
        return Constant.DEFAULT_PORT;
    }

    public static boolean getJdChainAvailable(){
        return Boolean.parseBoolean(getProperty("jdchain.available"));
    }

    /**
    * @description: 加载jdchain的配置
    * @param
    * @return: com.jdt.fedlearn.coordinator.jdchain.JdChainConfig
    * @author: geyan29
    * @date: 2021/2/2 4:32 下午
    */
    public static JdChainConfig getJdChainConfig(){
        JdChainConfig jdChainConfig = new JdChainConfig();
        jdChainConfig.setGatewayIp(getProperty("jdchain.gateway_ip"));
        jdChainConfig.setGatewayPort(getProperty("jdchain.gateway_port"));
        jdChainConfig.setGatewaySecure(getProperty("jdchain.gateway_secure"));
        jdChainConfig.setUserPubkey(getProperty("jdchain.user_pubkey"));
        jdChainConfig.setUserPrivkey(getProperty("jdchain.user_privkey"));
        jdChainConfig.setUserPrivpwd(getProperty("jdchain.user_privpwd"));
        jdChainConfig.setLedgerAddress(getProperty("jdchain.ledger_address"));
        jdChainConfig.setContractAddress(getProperty("jdchain.contract_address"));
        jdChainConfig.setDataAccountAddress(getProperty("jdchain.data_account_address"));
        jdChainConfig.setEventAccountAddress(getProperty("jdchain.event_account_address"));
        jdChainConfig.setUserTableAddress(getProperty("jdchain.user_table_address"));
        jdChainConfig.setTaskTableAddress(getProperty("jdchain.task_table_address"));
        jdChainConfig.setTrainTableAddress(getProperty("jdchain.train_table_address"));
        jdChainConfig.setInferenceTableAddress(getProperty("jdchain.inference_table_address"));
        return jdChainConfig;
    }

    public static String getPubKeyDir() {
        String pubKeyPath = getProperty("pubKey.dir");
        if (pubKeyPath != null) {
            return pubKeyPath;
        }
        return Constant.PUB_PATH;
    }

    public static String getNetworkType(){
        String type = getProperty("network.type");
        return type;
    }

}
package com.jdt.fedlearn.coordinator.dao;

import com.jdt.fedlearn.coordinator.dao.db.InferenceLogMapper;
import com.jdt.fedlearn.coordinator.dao.db.TrainMapper;
import com.jdt.fedlearn.coordinator.dao.jdchain.ChainInferenceMapper;
import com.jdt.fedlearn.coordinator.dao.jdchain


attribute of the ConvolverNode.

1.17.4.
Channel Configurations for Input, Impulse Response and Output

Implementations MUST support the following allowable configurations
of impulse response channels in a ConvolverNode
to achieve various reverb effects with 1 or 2 channels of input.

As shown in the diagram below, single channel convolution operates on a mono audio input, using a
mono impulse response, and generating a mono output. The remaining
images in the diagram illustrate the supported cases for mono and
stereo playback where the number of channels of the input is 1 or 2, and the number of channels in the buffer is 1, 2, or 4.
Developers desiring more complex and arbitrary matrixing can use a
ChannelSplitterNode, multiple single-channel
ConvolverNodes and a
ChannelMergerNode.

If this node is not actively processing, the output is a single
channel of silence.

Note: The diagrams below show the outputs when actively processing.

		A graphical representation of supported input and output channel
		count possibilities when using a
		ConvolverNode.

1.18.
The DelayNode Interface

A delay-line is a fundamental building block in audio applications.
This interface is an <a data-link-type="


e NotifyCollectionChangedAction.Add when e.NewItems is not null:
                AddHandlers(e.NewItems);
                break;
            case NotifyCollectionChangedAction.Remove when e.OldItems is not null:
                RemoveHandlers(e.OldItems);
                break;
            case NotifyCollectionChangedAction.Replace when e.NewItems is not null && e.OldItems is not null:
                AddHandlers(e.NewItems);
                RemoveHandlers(e.OldItems);
                break;
            case NotifyCollectionChangedAction.Move:
            case NotifyCollectionChangedAction.Reset:
            default:
                break;
        }

        RaiseInvalidated(new RenderInvalidatedEventArgs(this));
    }

    public event EventHandler<RenderInvalidatedEventArgs>? Invalidated;

    private void Item_Invalidated(object? sender, RenderInvalidatedEventArgs e)
    {
        RaiseInvalidated(e);
    }

    private void RaiseInvalidated(RenderInvalidatedEventArgs args)
    {
        Invalidated?.Invoke(this, args);
    }
}


cloud.documentai.v1.Document.Page.transforms:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Matrix
	19,  // 16: mockgcp.cloud.documentai.v1.Document.Page.dimension:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Dimension
	22,  // 17: mockgcp.cloud.documentai.v1.Document.Page.layout:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Layout
	32,  // 18: mockgcp.cloud.documentai.v1.Document.Page.detected_languages:type_name -> mockgcp.cloud.documentai.v1.Document.Page.DetectedLanguage
	23,  // 19: mockgcp.cloud.documentai.v1.Document.Page.blocks:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Block
	24,  // 20: mockgcp.cloud.documentai.v1.Document.Page.paragraphs:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Paragraph
	25,  // 21: mockgcp.cloud.documentai.v1.Document.Page.lines:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Line
	26,  // 22: mockgcp.cloud.documentai.v1.Document.Page.tokens:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Token
	28,  // 23: mockgcp.cloud.documentai.v1.Document.Page.visual_elements:type_name -> mockgcp.cloud.documentai.v1.Document.Page.VisualElement
	29,  // 24: mockgcp.cloud.documentai.v1.Document.Page.tables:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Table
	30,  // 25: mockgcp.cloud.documentai.v1.Document.Page.form_fields:type_name -> mockgcp.cloud.documentai.v1.Document.Page.FormField
	27,  // 26: mockgcp.cloud.documentai.v1.Document.Page.symbols:type_name -> mockgcp.cloud.documentai.v1.Document.Page.Symbol
	31,  // 27: mockgcp.cloud.documentai.v1.Document.Page.detected_barcodes:type_name -> mockgcp.cloud.documentai.v1.Document.Page.DetectedBarcode
	33,  // 28: mockgcp.cloud.documentai.v1.Document.Page.image_quality_scores:type_name -> mockgcp.cloud.documentai.v1.Document.Page.ImageQualityScores
	13,  // 29: mockgcp.cloud.documentai.v1.Document.Page.provenance:type_name -> mockgcp.cloud.documentai.v1.Document.Provenance
	11,  // 30: mockgcp.cloud.documentai.v1.Document.Entity.text_anchor:type_name -> mockgcp.cloud.documentai.v1.Document.TextAnchor
	12,  // 31: mockgcp.cloud.documentai.v1.Document.Entity.page_anchor:type_name -> mockgcp.cloud.documentai.v1.Document.PageAnchor
	39,  // 32: mockgcp.cloud.documentai.v1.Document.Entity.normalized_value:type_name -> mockgcp.cloud.documentai.v1.Document.Entity.NormalizedValue
	9,   // 33: mockgcp.cloud.documentai.v1.Document.Entity.properties:type_name -> mockgcp.cloud.documentai.v1.Document.Entity
	13,  // 34: mockgcp.cloud.documentai.v1.Document.Entity.provenance:type_name -> mockgcp.cloud.documentai.v1.Document.Provenance
	2,   // 35: mockgcp.cloud.documentai.v1.Document.Entity.method:type_name -> mockgcp.cloud.documentai.v1.Document.Entity.Method
	40,  // 36: mockgcp.cloud.documentai.v1.Document.TextAnchor.text_segments:type_name -> mockgcp.cloud.documentai.v1.Document.TextAnchor.Text


kType": "HARD"\
        }]\
      ]],\
      ["@babel/compat-data", [\
        ["npm:7.16.0", {\
          "packageLocation": "./.yarn/cache/@babel-compat-data-npm-7.16.0-a0e3ae307a-2befa4ba14.zip/node_modules/@babel/compat-data/",\
          "packageDependencies": [\
            ["@babel/compat-data", "npm:7.16.0"]\
          ],\
          "linkType": "HARD"\
        }],\
        ["npm:7.23.2", {\
          "packageLocation": "./.yarn/cache/@babel-compat-data-npm-7.23.2-763f35b25b-d8dc27437d.zip/node_modules/@babel/compat-data/",\
          "packageDependencies": [\
            ["@babel/compat-data", "npm:7.23.2"]\
          ],\
          "linkType": "HARD"\
        }]\
      ]],\
      ["@babel/core", [\
        ["npm:7.16.0", {\
          "packageLocation": "./.yarn/cache/@babel-core-npm-7.16.0-5612f0ce31-a140f669da.zip/node_modules/@babel/core/",\
          "packageDependencies": [\
            ["@babel/core", "npm:7.16.0"],\
            ["@babel/code-frame", "npm:7.16.0"],\
            ["@babel/generator", "npm:7.16.0"],\
            ["@babel/helper-compilation-targets", "virtual:5612f0ce311a7844500ba5948d5d47b8376a902bfa55b1e3797dd916bf18f7512ba75518521ba3bc2f39f6565fb127bcb8fee5b440624dbebaf9ac5f3566ebd0#npm:7.16.0"],\
            ["@babel/helper-module-transforms", "npm:7.16.0"],\
            ["@babel/helpers", "npm:7.16.0"],\
            ["@babel/parser", "npm:7.16.0"],\
            ["@babel/template", "npm:7.16.0"],\
            ["@babel/traverse", "npm:7.16.0"],\
            ["@babel/types", "npm:7.16.0"],\
            ["convert-source-map", "npm:1.8.0"],\
            ["debug", "virtual:4758feee42453c0e31b0d2032a7b1362d6b06281699830d2da9a056f2cca72bd2c5cfdb74005fdf03a64876be8eaca2dd7b0fc2dc59d14318badf19cb22ba18e#npm:4.3.2"],\
            ["gensync", "npm:1.0.0-beta.2"],\
            ["json5", "npm:2.2.0"],\
            ["semver", "npm:6.3.0"],\
            ["source-map", "npm:0.5.7"]\
          ],\
          "linkType": "HARD"\
        }],\
        ["npm:7.23.2", {\
          "packageLocation": "./.yarn/cache/@babel-core-npm-7.23.2-b93f586907-003897718d.zip/node_modules/@babel/core/",\
          "packageDependencies": [\
            ["@babel/core", "npm:7.23.2"],\
            ["@ampproject/remapping", "npm:2.2.1"],\
            ["@babel/code-frame", "npm:7.22.13"],\
            ["@babel/generator", "npm:7.23.0"],\
            ["@babel/helper-compilation-targets", "npm:7.22.15"],\
            ["@babel/helper-module-transforms", "virtual:b93f58690783b1aa7251e34369c6b343463347ed3b67c8f474540571f75c1eb3fa5322b


0, a restoran sredom radi 10:00-02:00 => treba da vrati true
                if (!nonWordkingDayYesterday) {
                    const yesterday = ordinalNumberOfDay === 0 ? 6 : ordinalNumberOfDay - 1; // u slucaju da je nedeljea(now.getDay()=0) danas-> juce je nedelja (now.getDay()=0)
                    const yesterdayWorkingTime = restourantWorkingHours.filter(rwh => rwh.dayOfWeekId === yesterday)[0];
                    const yesterdayClosingTimeInHrs = (parseInt(yesterdayWorkingTime.closingTime.split(':')[0]));
                    const yesterdayClosingTimeMins = (parseInt(yesterdayWorkingTime.closingTime.split(':')[1]));
                    const yesterdayClosingTimeInMins = yesterdayClosingTimeInHrs * 60 + yesterdayClosingTimeMins;
                    // treba nam i vreme otvaranja da bismo proverili da li je uopste juce restoran radio posle ponoci
                    // sto bi znacilo da je vreme zatvaranja manje od vremena otvaranja => yesterdayClosingTimeInMins < yesterdayOpeningTimeInMins
                    const yesterdayOpeningTimeInHrs = (parseInt(yesterdayWorkingTime.openingTime.split(':')[0]));
                    const yesterdayOpeningTimeMins = (parseInt(yesterdayWorkingTime.openingTime.split(':')[1]));
                    const yesterdayOpeningTimeInMins = yesterdayOpeningTimeInHrs * 60 + yesterdayOpeningTimeMins;

                    if (yesterdayClosingTimeInMins < yesterdayOpeningTimeInMins && yesterdayClosingTimeInMins >= hrsNow * 60 + minsNow) { // ukoliko jeste zatvara se u yesterdayClosingTime
                        isOpened = true;
                        closingTime = yesterdayWorkingTime.closingTime;
                    }
                    else { // trenutno zatvoren -> otvara se u danasnjih openingHrs
                        openingTime = todaysWorkingTime.openingTime.split(':')[0] + ":" + todaysWorkingTime.openingTime.split(':')[1];;
                        openingDay = daysOfWeek.find(day => day.ordinalNumber === ordinalNumberOfDay).name;
                    }
                }
                else { // ako je bio neradan dan juce
                    openingTime = todaysWorkingTime.openingTime.split(':')[0] + ":" + todaysWorkingTime.openingTime.split(':')[1];;
                    openingDay = daysOfWeek.find(day => day.ordinalNumber === ordinalNumberOfDay).name;
                }
            }
            else { // ako je trenutno vreme posle vremena zatvaranja, nastavi proveri za sutradan
                return getOpeningDetails(tomorrow, restourantWorkingHours, restourantNonWorkingDays, daysOfWeek, true);
            }
        }
        else { // ako je neradni dan danas, nastavi proveri za sutradan
            return getOpeningDetails(tomorrow, restourantWorkingHours, restourantNonWorkingDays, daysOfWeek, true);
        }
    }
    return { isOpened, openingTime, openingDay, closingTime };
}
import { BaseAnalyzer } from '../../base'
import { ResourceAnalysisResult, SeverityStatus, CheckAnalysisResult, CheckAnalysisType } from '../../../types';

export class DomainsTransferLockAnalyzer extends BaseAnalyzer {

    analyze(params: any): any {
        const allDomains = params.domains;
        if (!allDomains || allDomains.length === 0) {
            return undefined;
        }
        const domains_transfer_lock: CheckAnalysisResult = {type: CheckAnalysisType.Reli


/*
 * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
 * Lean Algorithmic Trading Engine v2.0. Copyright 2023 QuantConnect Corporation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/

using Python.Runtime;

namespace QuantConnect.Data.Fundamental
{
    /// <summary>
    /// Simple base class shared by top layer fundamental properties which depend on a time provider
    /// </summ


;border-radius:8px;float:left;margin:12px}.plugins .plugins-toolslist .plugins-toolslist__item .__btn[data-v-bf192214]{position:absolute;width:40px;height:28px;background:#fff;border:1px solid #dcdfe6;border-radius:4px;text-align:center;line-height:26px;right:12px;top:32px;display:block}.plugins .plugins-toolslist .plugins-toolslist__item:hover .__btn[data-v-bf192214]{display:block}.plugins .plugins-toolslist .plugins-toolslist__item .__icon[data-v-bf192214]{position:absolute;width:40px;height:40px;left:16px;top:16px}.plugins .plugins-toolslist .plugins-toolslist__item .__info[data-v-bf192214]{position:absolute;left:68px;top:16px;height:60px}.plugins .plugins-toolslist .plugins-toolslist__item .__info h3[data-v-bf192214]{height:20px;line-height:20px;font-size:14px;font-weight:400;color:#262626;margin:0}.plugins .plugins-toolslist .plugins-toolslist__item .__info p[data-v-bf192214]{height:20px;line-height:20px;font-size:12px;font-weight:400;color:#8c8c8c;margin:0}@charset "UTF-8";.le-prompt-text{font-size:12px;font-family:Microsoft YaHei;font-weight:400;color:#bfbfbf;line-height:20px}.el-popover--plain{padding:10px 15px!important}.le-search--form ::v-deep .el-form-item{margin-bottom:16px!important}.le-card{background:#fff;padding:24px;border-radius:16px}.le-card .le-card--head{font-size:16px;font-family:Microsoft YaHei;font-weight:400;color:#262626;margin-bottom:39px}.le-card .le-card--head .le-sign{display:inline-block;width:4px;height:16px;background:#623ceb;margin-right:12px}.le-card .le-pagination{padding-top:18px}.le-table .le-table--operating .le-operating--line{width:1px;height:12px;background-color:#623ceb}.le-table .le-table--operating .el-button--text{padding:9px 10px}.le-table .le-table--operating .el-button--text:first-child{padding-left:0}body{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none}#app,body,html{margin:0;padding:0;width:100%;height:100%;min-width:1024px}.task-action.el-message-box{width:360px;height:226px;background:#fff;border-radius:16px}.task-action.el-message-box .el-message-box__header{padding-top:32px}.task-action.el-message-box .el-message-box__header .el-message-box__title{display:block!important;font-size:18px;font-family:Microsoft YaHei;font-weight:400;color:#262626;line-height:20px;text-align:center}.task-action.el-message-box .el-message-box__content{padding:0 40px}.task-action.el-message-box .el-button{width:72px;height:32px;background:#fff;border:1px solid #dcdfe6;border-radius:4px;font-size:12px;font-family:Microsoft YaHei;font-weight:400}.task-action.el-message-box .el-button.el-button--primary{width:72px;height:32px;background:#623ceb;border-radius:4px;font-size:12px;font-f


     return softMutation(text);
        }
        return text;
    }
    function softMutation(text) {
        var mutationTable = {
            'm': 'v',
            'b': 'v',
            'd': 'z'
        };
        if (mutationTable[text.charAt(0)] === undefined) {
            return text;
        }
        return mutationTable[text.charAt(0)] + text.substring(1);
    }

    var br = moment.defineLocale('br', {
        months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
        monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
        weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
        longDateFormat : {
            LT : 'h[e]mm A',
            LTS : 'h[e]mm:ss A',
            L : 'DD/MM/YYYY',
            LL : 'D [a viz] MMMM YYYY',
            LLL : 'D [a viz] MMMM YYYY h[e]mm A',
            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
        },
        calendar : {
            sameDay : '[Hiziv da] LT',
            nextDay : '[Warc\'hoazh da] LT',
            nextWeek : 'dddd [da] LT',
            lastDay : '[Dec\'h da] LT',
            lastWeek : 'dddd [paset da] LT',
            sameElse : 'L'
        },
        relativeTime : {
            future : 'a-benn %s',
            past : '%s \'zo',
            s : 'un nebeud segondennoù',
            m : 'ur vunutenn',
            mm : relativeTimeWithMutation,
            h : 'un eur',
            hh : '%d eur',
            d : 'un devezh',
            dd : relativeTimeWithMutation,
            M : 'ur miz',
            MM : relativeTimeWithMutation,
            y : 'ur bloaz',
            yy : specialMutationForYears
        },
        ordinalParse: /\d{1,2}(añ|vet)/,
        ordinal : function (number) {
            var output = (number === 1) ? 'añ' : 'vet';
            return number + output;
        },
        week : {
            dow : 1, // Monday is the first day of the week.
            doy : 4  // The week that contains Jan 4th is the first week of the year.
        }
    });

    return br;

}));//! moment.js locale configuration
//! locale : hindi (hi)
//! author : Mayank Singhal : https://github.com/mayanksinghal

(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['moment'], factory) :
   factory(global.moment)
}(this, function (moment) { 'use strict';

    var symbolMap = {
        '1': '१',
        '2': '२',
        '3': '३',
        '4': '४',
        '5': '५',
        '6': '६',
        '7': '७',
        '8': '८',
        '9': '९',
        '0': '०'
    },
    numberMap = {
        '१': '1',
        '२': '2',
        '३': '3',
        '४': '4',
        '५': '5


self.seasonCultivateVM_.GetAttributeDes(info.attrConfig.Id))
      unit.lab_level.text = info.nodeLevel
      local isChoose = self.seasonCultivateVM_.CheckCoreAttrIsChooseByNodeId(info.attrConfig.NodeId)
      unit.Ref:SetVisible(unit.img_select, isChoose)
      unit.Ref:SetVisible(unit.img_use, isChoose)
    end
  end
  self.uiBinder.Ref:SetVisible(self.uiBinder.trans_attr, true)
end

function SeasonCultivateCore:resetCondition()
  for name, _ in pairs(self.conditionUnit_) do
    self:RemoveUiUnit(name)
  end
  self.conditionUnit_ = {}
  local max = self.seasonCultivateVM_.GetHoleMaxLevel(E.SeasonCultivateHole.Core)
  local current = self.seasonCultivateVM_.GetCoreNodeLevel()
  local hasNext = max > current
  self.levelLab_.text = Lang("LvFormat", {val = current})
  if current == 0 then
    self.uiBinder.lab_condition.text = Lang("SeasonCultivateCoreNum", {
      val = self.seasonCultivateVM_.GetCoreAttrCanChooseCount(1)
    })
  end
  self.uiBinder.Ref:SetVisible(self.uiBinder.node_active_tip, current == 0)
  self.uiBinder.Ref:SetVisible(self.uiBinder.node_levelup, hasNext)
  self.uiBinder.Ref:SetVisible(self.uiBinder.node_item, hasNext)
  self.uiBinder.Ref:SetVisible(self.randomLab_, 0 < current and hasNext)
  self.uiBinder.Ref:SetVisible(self.uiBinder.node_max_state, not hasNext)
  local height = hasNext and 420 or 740
  self.uiBinder.scrollview_item_trans:SetHeight(height)
  self.contentLab_.text = current == 0 and Lang("Activation") or Lang("levelUp")
  if not hasNext then
    return
  end
  local tempHole = self.seasonCultivateVM_.GetHoleConfigByLevel(E.SeasonCultivateHole.Core, current + 1)
  self:addNodeCondition(tempHole.NodeCondition)
  self:addCondition(tempHole.Condition)
end

function SeasonCultivateCore:addNodeCondition(condition)
  for i, v in pairs(condition) do
    local name = _formatStr("node_condition_{0}", i)
    local unit = self:AsyncLoadUiUnit(ConditionUnitPath, name, self.uiBinder.trans_condition.transform, self.cancelSource:CreateToken())
    if unit then
      self.conditionUnit_[name] = unit
      local type = v[1]
      local need = v[2]
      local current = 0
      if type == 1 then
        current = self.seasonCultivateVM_.GetNormalNodeTotalLevel()
      else
        current = self.seasonCultivateVM_.GetCoreNodeLevel()
      end
      local text = type == 1 and Lang("NormalNodeLevel") or Lang("CoreNodeLevel")
      local numText = _formatStr("{0}/{1}", current, need)
      if need <= current then
        text = Z.RichTextHelper.ApplyStyleTag(text, E.TextStyleTag.GreenTextColor2)
        numText = Z.RichTextHelper.ApplyStyleTag(numText, E.TextStyleTag.GreenTextColor2)
      else
        function self.errFunc_()
          Z.TipsVM.ShowTips(124013, {val = need})
        end

        self.canUpgradeState_ = 1
      end
      unit.lab_condition.text = text
      unit.lab_condition_schedule.text = numText
    end
  end
end

function SeasonCultivateCore:addCondition(condition)
  local results = self.seasonCultivateVM_.GetConditionDesc(condition)
  for i, result in pairs(results) do
    local name = _for


"name": "void _M_emplace_back_aux<rocksdb::SstFileMetaData const&>(rocksdb::SstFileMetaData const&)"}, {"value": 183, "name": "vector(std::vector<rocksdb::SstFileMetaData, std::allocator<rocksdb::SstFileMetaData> > const&)"}, {"value": 156, "name": "~vector()"}], "name": "vector<rocksdb::SstFileMetaData, std::allocator<rocksdb::SstFileMetaData> >::"}, {"children": [{"value": 682, "name": "void _M_emplace_back_aux<rocksdb::BackupEngineImpl::BackupAfterCopyOrCreateWorkItem>(rocksdb::BackupEngineImpl::BackupAfterCopyOrCreateWorkItem&&)"}], "name": "vector<rocksdb::BackupEngineImpl::BackupAfterCopyOrCreateWorkItem, std::allocator<rocksdb::BackupEngineImpl::BackupAfterCopyOrCreateWorkItem> >::"}, {"children": [{"value": 765, "name": "void _M_emplace_back_aux<rocksdb::BackupEngineImpl::RestoreAfterCopyOrCreateWorkItem>(rocksdb::BackupEngineImpl::RestoreAfterCopyOrCreateWorkItem&&)"}], "name": "vector<rocksdb::BackupEngineImpl::RestoreAfterCopyOrCreateWorkItem, std::allocator<rocksdb::BackupEngineImpl::RestoreAfterCopyOrCreateWorkItem> >::"}, {"children": [{"value": 940, "name": "void _M_emplace_back_aux<rocksdb::IngestedFileInfo const&>(rocksdb::IngestedFileInfo const&)"}], "name": "vector<rocksdb::IngestedFileInfo, std::allocator<rocksdb::IngestedFileInfo> >::"}, {"children": [{"value": 453, "name": "void _M_emplace_back_aux<rocksdb::LiveFileMetaData const&>(rocksdb::LiveFileMetaData const&)"}, {"value": 170, "name": "~vector()"}], "name": "vector<rocksdb::LiveFileMetaData, std::allocator<rocksdb::LiveFileMetaData> >::"}, {"children": [{"value": 1140, "name": "void _M_emplace_back_aux<>()"}, {"value": 1140, "name": "void _M_emplace_back_aux<rocksdb::ColumnFamilyOptions const&>(rocksdb::ColumnFamilyOptions const&)"}, {"value": 1747, "name": "void _M_emplace_back_aux<rocksdb::ColumnFamilyOptions>(rocksdb::ColumnFamilyOptions&&)"}], "name": "vector<rocksdb::ColumnFamilyOptions, std::allocator<rocksdb::ColumnFamilyOptions> >::"}, {"children": [{"value": 670, "name": "void _M_emplace_back_aux<rocksdb::SuperVersionContext::WriteStallNotification const&>(rocksdb::SuperVersionContext::WriteStallNotification const&)"}], "name": "vector<rocksdb::SuperVersionContext::WriteStallNotification, std::allocator<rocksdb::SuperVersionContext::WriteStallNotification> >::"}, {"children": [{"value": 476, "name": "_M_default_append(unsigned long)"}, {"value": 356, "name": "void _M_emplace_back_aux<>()"}, {"value": 586, "name": "void _M_emplace_back_aux<rocksdb::CompactionInputFiles const&>(rocksdb::CompactionInputFiles const&)"}, {"value": 420, "name": "void _M_emplace_back_aux<rocksdb::CompactionInputFiles>(rocksdb::CompactionInputFiles&&)"}, {"children": [{"value": 200, "name": "back(rocksdb::CompactionInputFiles const&)"}], "name": "push_"}, {"value": 155, "name": "vector(std::vector<rocksdb::CompactionInputFiles, std::allocator<rocksdb::CompactionInputFiles> > const&)"}], "name": "vector<rocksdb::CompactionInputFiles, std::allocator<rocksdb::CompactionInputFiles> >::"}, {"chi


rder=order)
        if enlarge_z:
            lidar_range_z_larger = copy.deepcopy(lidar_range)
            lidar_range_z_larger[2] -= 10
            lidar_range_z_larger[5] += 10
            lidar_range = lidar_range_z_larger

        bbx_lidar = mask_boxes_outside_range_numpy(bbx_lidar,
                                                   lidar_range,
                                                   order)

        if bbx_lidar.shape[0] > 0 and box_is_visible(bbx_lidar, visibility_map):
            output_dict.update({object_id: bbx_lidar})


D3Anim={}
--[[ State of animated meshs
- Each animated mesh have a list of bone descriptors (animBones) and a model reference (bonesTop)
]]
D3Anim._animated={}

-- State of animated models (which can contain several meshes)
-- A mesh's model is given by its 'bonesTop'
D3Anim._animatedModel={}

function D3Anim.updateBones()
	-- Go through all meshes with dirty models
	local cleaned={}
	local bonesMat={}
	for k,a in pairs(D3Anim._animated) do
		if k:isVisible() and D3Anim._animatedModel[k.bonesTop].dirty then
			local bt={}
			local bn=1
			for n,bd in ipairs(k.animBones) do
				local b=bd.bone
				local m
				if b then
					-- Bone to Mesh
					m=bonesMat[b]
					if not m then
						m=k.bonesTop:spriteToLocalMatrix(b)
						m:multiply(b.poseIMat)
						bonesMat[b]=m
					end
				else
					m=Matrix.new()
				end

				bt[bn],bt[bn+1],bt[bn+2],bt[bn+3],
				bt[bn+4],bt[bn+5],bt[bn+6],bt[bn+7],
				bt[bn+8],bt[bn+9],bt[bn+10],bt[bn+11],
				bt[bn+12],bt[bn+13],bt[bn+14],bt[bn+15]=m:getMatrix()
				bn=bn+16
			end
			k:setShaderConstant("bones",Shader.CMATRIX,#k.animBones,bt)
			cleaned[k.bonesTop]=true
		end
		a.dirty=false
	end
	for k,_ in pairs(cleaned) do
		D3Anim._animatedModel[k].dirty=false
	end
end

function D3Anim.animate(m,a)
	local ta={}
	local dtm=(os:timer()-a.tm)*1000*(a.speed or 1)
	local hasNext=false
	for _,b in ipairs(a.anim.bones) do
		local cf=1
		while cf<#b.keyframes and b.keyframes[cf].keytime<dtm do cf+=1 end
		if cf<#b.keyframes then hasNext=true end
		local f=b.keyframes[cf]
		if type(m.bones[b.boneId])=="table" then
			local nf=m.bones[b.boneId]
			local cm={ s=f.scale or nf.srt.s, r=f.rotation or nf.srt.r, t=f.translation or nf.srt.t}
			ta[b.boneId]=cm
		end
	end
	if not hasNext then
		if not a.loop then return ta,true end
		a.tm=os:timer()
	end
	return ta,false
end

function D3Anim.tick()
	-- Animate all models
	for k,a in pairs(D3Anim._animatedModel) do
		if k:isVisible() then
			local ares={}
			local aend={}
			-- Collect contributions from all running animations on this model
			for slot,anim in pairs(a.animations) do
				local function animateIns(mvs,ratio)
					for bone,srt in pairs(mvs) do
						ares[bone]=ares[bone] or {}
						table.insert(ares[bone],{ratio=ratio,mat={G3DFormat.srtToMatrix(srt):getMatrix()}})
					end
				end
				local ao,al,ac,aor=nil,nil,nil,1
				if anim.oldAni


еĸ
		void calRate(SpeciesPopulation list)
		{
			//Ӧ
			float totalFitness=0.0f;
			list.speciesNum=0;
			SpeciesIndividual point=list.head.next;//α
			while(point != null)//Ѱұβ
			{
				point.calFitness();//Ӧ

				totalFitness += point.fitness;
				list.speciesNum++;

				point=point.next;
			}

			//ѡи
			point=list.head.next;//α
			while(point != null)//Ѱұβ
			{
				point.rate=point.fitness/totalFitness;
				point=point.next;
			}
		}

		//ѡ̶֣ģ
		void select(SpeciesPopulation list)
		{
			//Ӧ
			calRate(list);

			//ҳӦ
			float talentDis=Float.MAX_VALUE;
			SpeciesIndividual talentSpecies=null;
			SpeciesIndividual point=list.head.next;//α

			while(point!=null)
			{
				if(talentDis > point.distance)
				{
					talentDis=point.distance;
					talentSpecies=point;
				}
				point=point.next;
			}

			//ӦָtalentNum
			SpeciesPopulation newSpeciesPopulation=new SpeciesPopulation();
			int talentNum=(int)(list.speciesNum/4);
			for(int i=1;i<=talentNum;i++)
			{
				//±
				SpeciesIndividual newSpecies=talentSpecies.clone();
				newSpeciesPopulation.add(newSpecies);
			}

			//̶list.speciesNum-talentNum
			int roundNum=list.speciesNum-talentNum;
			for(int i=1;i<=roundNum;i++)
			{
				//0-1ĸ
				float rate=(float)Math.random();

				SpeciesIndividual oldPoint=list.head.next;//α
				while(oldPoint != null && oldPoint != talentSpecies)//Ѱұβ
				{
					if(rate <= oldPoint.rate)
					{
						SpeciesIndividual newSpecies=oldPoint.clone();
						newSpeciesPopulation.add(newSpecies);

						break;
					}
					else
					{
						rate=rate-oldPoint.rate;
					}
					oldPoint=oldPoint.next;
				}
				if(oldPoint == null || oldPoint == talentSpecies)
				{
					//һ
					point=list.head;//α
					while(point.next != null)//Ѱұβ
						point=point.next;
					SpeciesIndividual newSpecies=point.clone();
					newSpeciesPopulation.add(newSpecies);
				}

			}
			list.head=newSpeciesPopulation.head;
		}

		//
		void crossover(SpeciesPopulation list)
		{
			//Ըpcl~pch
			float rate=(float)Math.random();
			if(rate > TSPData.pcl && rate < TSPData.pch)
			{
				SpeciesIndividual point=list.head.next;//α
				Random rand=new Random();
				int find=rand.nextInt(list.speciesNum);
				while(point != null && find != 0)//Ѱұβ
				{
					point=point.next;
					find--;
				}

				if(point.next != null)
				{
					int begin=rand.nextInt(TSPData.CITY_NUM);

					//ȡpointpoint.nextн棬γµȾɫ
					for(int i=begin;i<TSPData.CITY_NUM;i++)
					{
						//ҳpoint.genespoint.next.genes[i]ȵλfir
						//ҳpoint.next.genespoint.genes[i]ȵλsec
						int fir,sec;
						for(fir=0;!point.genes[fir].equals(point.next.genes[i]);fir++);
						for(sec=0;!point.next.genes[sec].equals(point.genes[i]);sec++);
						//򻥻
						String tmp;
						tmp=point.genes[i];
						point.genes[i]=point.next.genes[i];
						point.next.genes[i]=tmp;

						//ȥظǸ
						p


_2.f7F1C830E
  L10_2 = L1_2
  L11_2 = L6_2[1]
  L12_2 = L6_2[2]
  L13_2 = L6_2[3]
  L14_2 = L7_2
  L9_2(L10_2, L11_2, L12_2, L13_2, L14_2)
end

L68_1 = _ENV["C7C74005F4EB205E6"]["prototype"


 * Copyright 2025 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
!function(a){"function"==typeof define&&define.amd?define(["kendo.core.min"],a):a()}((function(){kendo.cultures["shi-Latn"]={name:"shi-Latn",numberFormat:{pattern:["-n"],decimals:2,",":" ",".":",",groupSize:[3],percent:{pattern:["-n%","n%"],decimals:2,",":" ",".":",",groupSize:[3],symbol:"%"},currency:{name:"",abbr:"",pattern:["-n$","n$"],decimals:2,",":" ",".":",",groupSize:[3],symbol:"MAD"}},calendars:{standard:{days:{names:["asamas","aynas","asinas","akṛas","akwas","asimwas","asiḍyas"],namesAbbr:["asa","ayn","asi","akṛ","akw","asim","asiḍ"],namesShort:["asa","ayn","asi","akṛ","akw","asim","asiḍ"]},months:{names:["innayr","bṛayṛ","maṛṣ","ibrir","mayyu","yunyu","yulyuz","ɣuct","cutanbir","ktubr","nuwanbir","dujanbir"],namesAbbr:["inn","bṛa","maṛ","ibr","may","yun","yul","ɣuc","cut","ktu","nuw","duj"]},AM:["tifawt","tifawt","TIFAWT"],PM:["tadggʷat","tadggʷat","TADGGʷAT"],patterns:{d:"d/M/yyyy",D:"dddd d MMMM yyyy",F:"dddd d MMMM yyyy HH:mm:ss",g:"d/M/yyyy HH:mm",G:"d/M/yyyy HH:mm:ss",m:"d MMMM",M:"d MMMM",s:"yyyy'-'MM'-'dd'T'HH':'mm':'ss",t:"HH:mm",T:"HH:mm:ss",u:"yyyy'-'MM'-'dd HH':'mm':'ss'Z'",y:"MMMM yyyy",Y:"MMMM yyyy"},"/":"/",":":":",firstDay:1}}}}));
//# sourceMappingURL=kendo.culture.shi-Latn.min.js.map
/**
 * Copyright 2025 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
!function(e){"function"==typeof define&&define.amd?define(["kendo.core.min"],e):e()}((function(){kendo.cultures["pt-LU"]={name:"pt-LU",numberFormat:{pattern:["-n"],de


btc250Sbintro8722Sb1 => 'Cumpărarea de bitcoini în mod anonim a devenit o sarcină din ce în ce mai dificilă.';

  @override
  String guide250Sbbtc250Sbintro8722Sb2(Object ninetyNineBitcoins, Object coincentral, Object linebreak, Object gutter, Object localbitcoins, Object paypal) {
    return 'Cu fiecare zi care trece, se pare că majoritatea, dacă nu chiar toate metodele tradiționale de achiziționare a bitcoin au început să necesite verificarea actelor de identitate, ceea ce face ca majoritatea ghidurilor disponibile online astăzi, cum ar fi cel de pe $ninetyNineBitcoins sau $coincentral să fie depășite. $linebreak  $gutter Modalitatea tradițională de a cumpăra bitcoini fără acte de identitate a fost, în principal, prin intermediul platformei de schimb Bitcoin P2P $localbitcoins, un loc care a fost deosebit de popular pentru cumpărarea de bitcoin în mod anonim cu $paypal.';
  }

  @override
  String get guide250Sbbtc250Sbintro8722Sb3 => 'Dar, din păcate, chiar și LocalBitcoins au început să ceară verificarea actelor de identitate de la toți comercianții lor.';

  @override
  String get guide250Sbbtc250Sbintro8722Sb4 => 'Deci, zilele în care puteai cumpăra bitcoini cu un card de credit instantaneu și fără verificare au trecut? Nu chiar. Vă prezentăm aici o modalitate ușoară, anonimă, privată și rapidă de a achiziționa bitcoini cu bani în numerar în doar câțiva pași... ';

  @override
  String get guide250Sbbtc250Sbtitle => 'Cum să cumpărați Bitcoins în mod anonim';

  @override
  String guide250Sbbuy250Sbstep8722Sbfive8722Sbtext(Object assetName) {
    return 'După ce ați efectuat plata, faceți clic pe butonul \"Am plătit\". După ce comerciantul a verificat că plata a fost primită, tranzacția se va finaliza și în curând veți vedea $assetName în portofelul dvs. de decontare. Și asta e tot, felicitări pentru prima tranzacție cu $assetName!';
  }

  @override
  String guide250Sbbuy250Sbstep8722Sbfive8722Sbtext8722Sblocalmonero8722Sbwallet(Object appName) {
    return 'portofel $appName';
  }

  @override
  String guide250Sbbuy250Sbstep8722Sbfour8722Sbtext(Object assetName) {
    return 'După ce apăsați butonul \"Cumpărați\", veți vedea mai multe informații despre anunț, inclusiv condițiile de tranzacționare. Citiți-le înainte de a trimite cererea de tranzacționare, dacă nu sunteți de acord cu ele, puteți reveni la pagina anterioară și alege un alt anunț. Pentru a începe tranzacția, introduceți cât doriți să cumpărați din $assetName și faceți clic pe butonul \"Trimiteți cererea de tranzacționare\" pentru a începe tranzacția. Asigurați-vă că sunteți gata să plătiți atunci când faceți clic pe buton, dacă nu plătiți înainte de expirarea ferestrei de plată, vânzătorul va putea anula tranzacția.';
  }

  @override
  String guide250Sbbuy250Sbstep87


 testFileLocation + "/testErrorProject");
        errorLog.waitForText(5000);
    }

    @Test
    public void testConfigurableModuleStructureWithTestAPI() throws BallerinaTestException {
        LogLeecher testLog1 = new LogLeecher("5 passing");
        LogLeecher testLog2 = new LogLeecher("4 passing");
        bMainInstance.runMain("test", new String[]{"configPkg"}, null, new String[]{},
                new LogLeecher[]{testLog1, testLog2}, testFileLocation + "/testModuleStructureProject");
        testLog1.waitForText(5000);
        testLog2.waitForText(5000);
    }

    @Test
    public void testFileEnvVariableBasedConfigurable() throws BallerinaTestException {

        // test config file location through `BAL_CONFIG_FILES` env variable
        String configFilePaths = Path.of(testFileLocation, "config_files", "Config-A.toml") +
                File.pathSeparator + Path.of(testFileLocation, "config_files", "Config-B.toml");
        executeBalCommand("", "envVarPkg",
                addEnvironmentVariables(Map.ofEntries(Map.entry(CONFIG_FILES_ENV_VARIABLE, configFilePaths))));
    }

    @Test
    public void testDataEnvVariableBasedConfigurableNegative() throws BallerinaTestException {
        LogLeecher errorLeecher1 = new LogLeecher("warning: invalid TOML file :", ERROR);
        LogLeecher errorLeecher2 = new LogLeecher("[BAL_CONFIG_DATA:(1:11,1:12)] missing new line", ERROR);
        LogLeecher errorLeecher3 = new LogLeecher("[BAL_CONFIG_DATA:(1:22,1:24)] missing new line", ERROR);
        LogLeecher errorLeecher4 = new LogLeecher("[BAL_CONFIG_DATA:(1:36,1:39)] missing new line", ERROR);
        LogLeecher errorLeecher5 = new LogLeecher("[BAL_CONFIG_DATA:(1:52,1:57)] missing new line", ERROR);
        LogLeecher errorLeecher6 = new LogLeecher("[BAL_CONFIG_DATA:(1:71,1:75)] missing new line", ERROR);
        LogLeecher errorLeecher7 = new LogLeecher("[BAL_CONFIG_DATA:(1:89,1:94)] missing new line", ERROR);
        LogLeecher errorLeecher8 = new LogLeecher("[BAL_CONFIG_DATA:(1:104,1:111)] missing new line", ERROR);
        LogLeecher errorLeecher9 = new LogLeecher("error: value not provided for required configurable variable" +
                " 'stringVar'", ERROR);
        LogLeecher errorLeecher10 = new LogLeecher("error: value not provided for required configurable variable" +
                " 'booleanVar'", ERROR);
        LogLeecher errorLeecher11 = new LogLeecher("error: value not provided for required configurable variable" +
                " 'intArr'", ERROR);
        LogLeecher errorLeecher12 = new LogLeecher("error: value not provided for required configurable variable" +
                " 'decimalArr'", ERROR);
        // test configuration through `BAL_CONFIG_DATA` env variable
        String configData = "[envVarPkg] intVar = 42 floatVar = 3.5 stringVar = \"abc\" booleanVar = true " +
                "decimalVar = 24.87 intArr = [1,2,3] floatArr = [9.0, 5.6]";
        bMainInstance.runMain(testFileLocation, "envVarPkg", null, new String[]{},
                addEnvironmentVariables(Map.ofEntries(Map.entry(CONFIG_DATA_ENV_VARIABLE, configData))), null,
                new LogLeecher[]{errorLeecher1, errorLeecher2, errorLeecher3, errorLeecher4, errorLeecher5,
                        errorLeecher6, errorLeecher7, errorL


4DCC9D7634FA
  L5_2 = L5_2.S760DAE4C5371A78E
  L5_2()
  while true do
    L6_2 = A0_2
    L5_2 = A0_2.F019F6CFDCADEA49F
    L5_2 = L5_2(L6_2)
    if not L5_2 then
      break
    end
    L5_2 = C1DB14DCC9D7634FA
    L5_2 = L5_2.S760DAE4C5371A78E
    L5_2()
  end
end

_ENV["C15081EBD8D9F4068"]["prototype"]["F019F6CFDCADEA49F"] = function(A0_2)

  local L1_2, L2_2
  L1_2 = A0_2[1]
  L2_2 = L1_2
  L1_2 = L1_2.F84011CCF36B9CFD9
  return L1_2(L2_2)
end

_ENV["C15081EBD8D9F4068"]["prototype"]["FD70C9EBCF631D9E8"] = function(A0_2)

  local L1_2
  A0_2[15] = true
end

L68_1 = _ENV["C15081EBD8D9F4068"]["prototype"]
L69_1 = _ENV["C15081EBD8D9F4068"]
L68_1.__class__ = L69_1
L68_1 = _ENV["C15081EBD8D9F4068"]
L69_1 = "__super__"
L69_1 = _ENV["C15081EBD8D9F4068"]["prototype"]
L70_1 = {}
L71_1 = "__index"


 You may obtain a copy of the Licence at:
 *
 * https://joinup.ec.europa.eu/software/page/eupl
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the Licence is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the Licence for the specific language governing permissions and
 * limitations under the Licence.
 */
package de.ingrid.igeserver.exports.ingrid

import com.fasterxml.jackson.databind.node.ObjectNode
import de.ingrid.igeserver.exports.GENERATED_UUID_REGEX
import de.ingrid.igeserver.exports.IgeExporter
import de.ingrid.igeserver.exports.convertToDocument
import de.ingrid.igeserver.exports.prettyFormatXml
import de.ingrid.igeserver.persistence.postgresql.jpa.model.ige.Catalog
import de.ingrid.igeserver.persistence.postgresql.jpa.model.ige.Document
import de.ingrid.igeserver.schema.SchemaUtils
import java.time.LocalDate
import java.util.regex.Pattern

/**
 * Updates the datestamp in the expected XML file to match the current date.
 * This is needed because the exporter now updates the datestamp to the current date.
 */
fun updateDatestampInExpectedXml(xml: String): String {
    val currentDate = LocalDate.now().toString()

    // Pattern to match only the date content within the datestamp in the XML
    val datePattern = Pattern.compile("(<gmd:dateStamp>\\s*<gco:Date>)(.*?)(</gco:Date>\\s*</gmd:dateStamp>)")
    val dateTimePattern = Pattern.compile("(<gmd:dateStamp>\\s*<gco:DateTime>)(.*?)(</gco:DateTime>\\s*</gmd:dateStamp>)")

    var result = xml

    // Replace only the date content, preserving the original XML structure
    val dateMatcher = datePattern.matcher(result)
    if (dateMatcher.find()) {
        result = dateMatcher.replaceAll("$1$currentDate$3")
    }

    // Replace only the datetime content, preserving the original XML structure
    val dateTimeMatcher = dateTimePattern.matcher(result)
    if (dateTimeMatcher.find()) {
        result = dateTimeMatcher.replaceAll("$1$currentDate$3")
    }

    return result
}

fun exportJsonToXML(exporter: IgeExporter, file: String, additional: ObjectNode? = null): String {
    val input = SchemaUtils.getJsonFileContent(file)
    val doc = convertToDocument(input)

    if (additional != null) {
        doc.data.setAll<ObjectNode>(additional)
        doc.catalog = Catalog().apply { identifier = "test-catalog" }
    }

    val result = exporter.run(doc, "test-catalog") as String
    return prettyFormatXml(result, 4).replace("\r\n", "\n")
}

fun exportDocToXML(exporter: IgeExporter, doc: Document): String = (exporter.run(doc, "test-catalog") as String).let {
    prettyFormatXml(it, 4).replace("\r\n", "\n")
        .replace(GENERATED_UUID_REGEX, "ID_00000000-0000-0000-0000-000000000000")
}.also { println(it) }

fun exportJsonStringToXML(exporter: IgeExporter, json: String): String {
    val doc = convertToDocument(json)
    val result = exporter.run(doc, "test-catalog") as String
    return prettyFormatXml(result, 4).replace("\r\n", "\n")
}

fun exportJsonToJson(exporter: IgeExporter, file: String): String {
    val input = SchemaUtils.getJsonFileContent(file)
    val doc = convertToDocument(input)
    val result = exporter.run(doc, "test-catalog") as String
    return result
}
/**
 * ==================================================
 * Copyright (C) 2023-2025 wemove digital solutions GmbH
 * ==================================================
 * Licensed under the EUPL, Version 1.2 or – as soon they will be
 * approved by the European Commission - subsequent versions of the
 * EUPL (the "Licence");
 *
 * You may not use this work except in compliance with t


X] != "") ||
		(params[GT] != "" && params[LT] != "") {
		return 0, errors.New("GT, LT, and/or NX options at the same time are not compatible")
	}
	if params[INCR] != "" && len(members) > 1 {
		return 0, errors.New("INCR option supports a single increment-element pair")
	}

	for i := range scores {
		score, member := scores[i], members[i]
		n := s.GetByKey(member)
		exists := n != nil
		currentScore := sortedset.SCORE(0)
		if exists {
			currentScore = n.Score()
		}

		// Handle INCR option
		if params[INCR] != "" {
			if exists {
				score = int64(currentScore) + score
			}
			s.AddOrUpdate(member, sortedset.SCORE(score), nil)
			return score, nil
		}

		// Skip based on NX/XX flags
		if (params[NX] != "" && exists) || (params[XX] != "" && !exists) {
			continue
		}

		// Skip based on GT/LT conditions
		if exists {
			if params[GT] != "" && sortedset.SCORE(score) <= currentScore {
				continue
			}
			if params[LT] != "" && sortedset.SCORE(score) >= currentScore {
				continue
			}
		}

		// Add or update the member
		wasInserted := s.AddOrUpdate(member, sortedset.SCORE(score), nil)
		if wasInserted && !exists {
			addedCount++
		} else if exists && sortedset.SCORE(score) != currentScore {
			updatedCount++
		}
	}

	// Return appropriate count based on CH flag
	if params[CH] != "" {
		return int64(addedCount + updatedCount), nil
	}
	return int64(addedCount), nil
}

func (s *SortedSet) ZCOUNT(minScore, maxScore int64) int64 {
	return int64(len(s.GetByScoreRange(sortedset.SCORE(minScore), sortedset.SCORE(maxScore), nil)))
}

func (s *SortedSet) ZRANGE(start, stop int, byScore, byRank bool) []*wire.ZElement {
	var nodes []*sortedset.SortedSetNode
	if byScore {
		nodes = s.GetByScoreRange(
			sortedset.SCORE(start),
			sortedset.SCORE(stop),
			&sortedset.GetByScoreRangeOptions{})
	} else {
		nodes = s.GetByRankRange(start, stop, false)
	}

	var rank int64 = 0
	if len(nodes) > 0 {
		rank = int64(s.FindRank(nodes[0].Key()))
	}

	result := make([]*wire.ZElement, len(nodes))
	for i, node := range nodes {
		result[i] = &wire.ZElement{
			Member: node.Key(),
			Score:  int64(node.Score()),
			Rank:   rank + int64(i),
		}
	}
	return result
}
package raft

import (
	"context"
	"errors"
	"fmt"
	"path/filepath"
	"runtime"
	"sort"
	"sync"
	"testing"
	"time"

	"github.com/sevenDatabase/SevenDB/config"
	"go.etcd.io/etcd/raft/v3/raftpb"
)

// memTransport is a simple in-process Transport used only for tests. It directly
// invokes Step on target nodes without serialization or network.
type memTransport struct {
	mu    sync.RWMutex
	nodes map[uint64]*ShardRaftNode
}

func newMemTransport() *memTransport { return &memTransport{nodes: make(map[uint64]*ShardRaftNode)} }

func (m *memTransport) Send(ctx context.Context, msgs []raftpb.Message) {
	m.mu.RLock()
	defer m.mu.RUnlock()
	for _, msg := range msgs {
		if msg.To == 0 {
			continue
		}
		n := m.n


: var(--space-sm);
  }
  .top-md\@lg {
    top: var(--space-md);
  }
  .right-md\@lg {
    right: var(--space-md);
  }
  .bottom-md\@lg {
    bottom: var(--space-md);
  }
  .left-md\@lg {
    left: var(--space-md);
  }
  .top-lg\@lg {
    top: var(--space-lg);
  }
  .right-lg\@lg {
    right: var(--space-lg);
  }
  .bottom-lg\@lg {
    bottom: var(--space-lg);
  }
  .left-lg\@lg {
    left: var(--space-lg);
  }
  .top-xl\@lg {
    top: var(--space-xl);
  }
  .right-xl\@lg {
    right: var(--space-xl);
  }
  .bottom-xl\@lg {
    bottom: var(--space-xl);
  }
  .left-xl\@lg {
    left: var(--space-xl);
  }
  .top-2xl\@lg {
    top: var(--space-2xl);
  }
  .right-2xl\@lg {
    right: var(--space-2xl);
  }
  .bottom-2xl\@lg {
    bottom: var(--space-2xl);
  }
  .left-2xl\@lg {
    left: var(--space-2xl);
  }
  .top-3xl\@lg {
    top: var(--space-3xl);
  }
  .right-3xl\@lg {
    right: var(--space-3xl);
  }
  .bottom-3xl\@lg {
    bottom: var(--space-3xl);
  }
  .left-3xl\@lg {
    left: var(--space-3xl);
  }
  .top-4xl\@lg {
    top: var(--space-4xl);
  }
  .right-4xl\@lg {
    right: var(--space-4xl);
  }
  .bottom-4xl\@lg {
    bottom: var(--space-4xl);
  }
  .left-4xl\@lg {
    left: var(--space-4xl);
  }
  .top-50\%\@lg {
    top: 50%;
  }
  .top-auto\@lg {
    top: auto;
  }
  .top-0\@lg {
    top: 0;
  }
  .right-50\%\@lg {
    right: 50%;
  }
  .right-auto\@lg {
    right: auto;
  }
  .right-0\@lg {
    right: 0;
  }
  .bottom-50\%\@lg {
    bottom: 50%;
  }
  .bottom-auto\@lg {
    bottom: auto;
  }
  .bottom-0\@lg {
    bottom: 0;
  }
  .left-50\%\@lg {
    left: 50%;
  }
  .left-auto\@lg {
    left: auto;
  }
  .left-0\@lg {
    left: 0;
  }
  /* overflow */
  .overflow-visible\@lg {
    overflow: visible;
  }
  .overflow-hidden\@lg {
    overflow: hidden;
  }
  .overflow-auto\@lg {
    overflow: auto;
  }
  .momentum-scrolling\@lg {
    -webkit-overflow-scrolling: touch;
  }
  /* visibility */
  .visible\@lg {
    visibility: visible;
  }
  .invisible\@lg {
    visibility: hidden;
  }
}
@media not all and (min-width: 80rem) {
  .display\@lg {
    display: none !important;
  }
}
@media (min-width: 90rem) {
  /* grid */
  .grid-col-1\@xl {
    --grid-columns:


 root directory of this source tree.
	 *
	 */

	'use strict';

	var escapeTextContentForBrowser = __webpack_require__(81);

	/**
	 * Escapes attribute value to prevent scripting attacks.
	 *
	 * @param {*} value Value to escape.
	 * @return {string} An escaped string.
	 */
	function quoteAttributeValueForBrowser(value) {
	  return '"' + escapeTextContentForBrowser(value) + '"';
	}

	module.exports = quoteAttributeValueForBrowser;

/***/ }),
/* 100 */
/***/ (function(module, exports, __webpack_require__) {

	/**
	 * Copyright (c) 2013-present, Facebook, Inc.
	 *
	 * This source code is licensed under the MIT license found in the
	 * LICENSE file in the root directory of this source tree.
	 *
	 */

	'use strict';

	var _assign = __webpack_require__(3);

	var EventPluginRegistry = __webpack_require__(42);
	var ReactEventEmitterMixin = __webpack_require__(101);
	var ViewportMetrics = __webpack_require__(71);

	var getVendorPrefixedEventName = __webpack_require__(102);
	var isEventSupported = __webpack_require__(65);

	/**
	 * Summary of `ReactBrowserEventEmitter` event handling:
	 *
	 *  - Top-level delegation is used to trap most native browser events. This
	 *    may only occur in the main thread and is the responsibility of
	 *    ReactEventListener, which is injected and can therefore support pluggable
	 *    event sources. This is the only work that occurs in the main thread.
	 *
	 *  - We normalize and de-duplicate events to account for browser quirks. This
	 *    may be done in the worker thread.
	 *
	 *  - Forward these native events (with the associated top-level type used to
	 *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
	 *    to extract any synthetic events.
	 *
	 *  - The `EventPluginHub` will then process each event by annotating them with
	 *    "dispatches", a sequence of listeners and IDs that care about that event.
	 *
	 *  - The `EventPluginHub` then dispatches the events.
	 *
	 * Overview of React and the event system:
	 *
	 * +------------+    .
	 * |    DOM     |    .
	 * +------------+    .
	 *       |           .
	 *       v           .
	 * +------------+    .
	 * | ReactEvent |    .
	 * |  Listener  |    .
	 * +------------+    .                         +-----------+
	 *       |           .               +--------+|SimpleEvent|
	 *       |           .               |         |Plugin     |
	 * +-----|------+    .               v         +-----------+
	 * |     |      |    .    +--------------+                    +------------+
	 * |     +-----------.--->|EventPluginHub|                    |    Event   |
	 * |            |    .    |              |     +-----------+  | Propagators|
	 * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
	 * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
	 * |            |    .    |              |     +-----------+  |  utilities |
	 * |     +-----------.--->|              |                    +------------+
	 * |     |      |    .    +--------------+
	 * +-----|------+    .                ^        +-----------+
	 *       |           .                |        |Enter/Leave|
	 *       +           .                +-------+|Plugin     |
	 * +-------------+   .                         +-----------+
	 * | application |   .
	 * |-------------|   .
	 * |             |   .
	 * |             |   .
	 * +-------------+   .
	 *                   .
	 *    React Core     .  General Purpose Event Pl


#pragma once

#include "GAFObject.h"

NS_GAF_BEGIN

class GAFColorColorMatrixFilterData;
class GAFGlowFilterData;
class GAFBlurFilterData;

class GAFMovieClip : public GAFObject
{
private:
    void _setBlendingFunc();
    void handleStencilProgram();

protected:
    cocos2d::Vec4                   m_colorTransformMult;
    cocos2d::Vec4                   m_colorTransformOffsets;
    cocos2d::Mat4                   m_colorMatrixIdentity1;
    cocos2d::Vec4                   m_colorMatrixIdentity2;
    GAFColorColorMatrixFilterData*  m_colorMatrixFilterData;
    GAFGlowFilterData*              m_glowFilterData;
    GAFBlurFilterData*              m_blurFilterData;
    cocos2d::Texture2D *            m_initialTexture;
    cocos2d::Rect                   m_initialTextureRect;
    cocos2d::GLProgramState*        m_programBase;
    cocos2d::GLProgramState*        m_programNoCtx;
    mutable bool                    m_ctxDirty;
    bool                            m_isStencil;

    void updateTextureWithEffects();
    virtual uint32_t setUniforms() override;

public:

    GAFMovieClip();
    virtual ~GAFMovieClip();

    virtual bool initWithTexture(cocos2d::Texture2D *pTexture, const cocos2d::Rect& rect, bool rotated) override;

    void setColorTransform(const GLfloat * mults, const GLfloat * offsets);
    void setColorTransform(const GLfloat * colorTransform);

    void setColorMarixFilterData(GAFColorColorMatrixFilterData* data);
    void setGlowFilterData(GAFGlowFilterData* data);
    void setBlurFilterData(GAFBlurFilterData* data);

    cocos2d::Texture2D*    getInitialTexture() const;
    const cocos2d::Rect&   getInitialTextureRect() const;

    bool            hasCtx();
    void            updateCtx();
    void            setGLProgram(cocos2d::GLProgram *glProgram); // For monitoring external program changes

#if COCOS2D_VERSION < 0x00030200
    virtual void draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, bool transformUpdated) override;
#else
    virtual void draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags) override;
#endif
};

NS_GAF_END


                    .replace("algorithm", "")
                    .replace("label", "")
                    .replace(Regex("""[^a-zA-Z\\d]"""), "")
                    .contains(searchTerms.lowercase())
            ) results.add(_login)
        return results
    }

    fun aegisToWristkey (unencryptedAegisJsonString: JSONObject): MutableList<MfaCode> {

        val logins = mutableListOf<MfaCode>()

        val db = unencryptedAegisJsonString["db"].toString()
        val entries = JSONObject(db)["entries"].toString()

        val itemsArray = JSONArray(entries)

        for (itemIndex in 0 until itemsArray.length()) {
            try {

                val accountData = JSONObject(itemsArray[itemIndex].toString())
                var type = accountData["type"]
                val uuid = accountData["uuid"].toString()
                val issuer = accountData["issuer"].toString()
                var username = accountData["name"].toString()

                if (username == issuer || username == "null" || username.isEmpty()) username = ""

                var totpSecret = JSONObject(accountData["info"].toString())["secret"].toString()
                val digits = JSONObject(accountData["info"].toString())["digits"].toString().toInt()
                var algorithm = JSONObject(accountData["info"].toString())["algo"].toString()
                var period = JSONObject(accountData["info"].toString())["period"].toString().toInt()
                var counter = try { JSONObject(accountData["info"].toString())["counter"].toString().toLong() } catch (_: JSONException) { 0L }

                type = if (type.equals("totp")) "totp" else "hotp"

                if (totpSecret.isNotEmpty() && totpSecret != "null") {
                    logins.add (
                        MfaCode(
                            mode = type,
                            issuer = issuer,
                            account = username,
                            secret = totpSecret,
                            algorithm = algorithm,
                            digits = digits,
                            period = period,
                            lock = false,
                            counter = counter,
                            label = ""
                        )
                    )
                }

            } catch (noData: JSONException) {
                noData.printStackTrace()
            }
        }

        return logins

    }

    fun getTime(): String {
        val hourType = if (android.text.format.DateFormat.is24HourFormat(context)) "HH" else "hh"
        val currentHour = SimpleDateFormat(hourType, Locale.getDefault()).format(Date())
        val currentMinute = SimpleDateFormat("mm", Locale.getDefault()).format(Date())
        return "$currentHour:$currentMinute"
    }

    fun decodeOtpAuthURL(otpAuthURL: String): MfaCode? {
        return try {
            val decodedURL = URLDecoder.decode(otpAuthURL, "UTF-8")

            val parts = decodedURL.split("?")
            if (parts.size != 2) return null

            val params = parts[1].split("&")
            val paramMap = mutableMapOf<String, String>()

            for (param in params) {
                val keyValue = param.split("=")
                if (keyValue.size == 2) paramMap[keyValue[0]] = keyValue[1]
            }

            val mode = if (parts[0].substringAfter("://").substringBefore("/") == "hotp") MFA_COUNTER_MODE else MFA_TIME_MODE
            val issuer = parts[0].substringAfter("otp/").substringBefore(":")
            val account = parts[0].substringAfter("otp/").substringAfter(":")
            val secret = paramMap["secret"]
            val algorithm = paramMap["algorithm"] ?: ALGO_SHA1
            val digit


8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/settle.js\n");

/***/ }),

/***/ "./node_modules/axios/lib/core/transformData.js":
/*!******************************************************!*\
  !*** ./node_modules/axios/lib/core/transformData.js ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar defaults = __webpack_require__(/*! ./../defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLDJEQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMv


 +%Y-%m-%dT%H-%M%S).html k6 run -e USE_GZIP=false k6-getBlock.js
//Base64 Decoder
var base64={};base64.PADCHAR='=';base64.ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';base64.makeDOMException=function(){var e,tmp;try{return new DOMException(DOMException.INVALID_CHARACTER_ERR)}catch(tmp){var ex=new Error('DOM Exception 5');ex.code=ex.number=5;ex.name=ex.description='INVALID_CHARACTER_ERR';ex.toString=function(){return'Error: '+ex.name+': '+ex.message};return ex}};base64.getbyte64=function(s,i){var idx=base64.ALPHA.indexOf(s.charAt(i));if(idx===-1){throw base64.makeDOMException();}return idx};base64.decode=function(s){s=''+s;var getbyte64=base64.getbyte64;var pads,i,b10;var imax=s.length;if(imax===0){return s}if(imax%4!==0){throw base64.makeDOMException();}pads=0;if(s.charAt(imax-1)===base64.PADCHAR){pads=1;if(s.charAt(imax-2)===base64.PADCHAR){pads=2}imax-=4}var x=[];for(i=0;i<imax;i+=4){b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12)|(getbyte64(s,i+2)<<6)|getbyte64(s,i+3);x.push(String.fromCharCode(b10>>16,(b10>>8)&0xff,b10&0xff))}switch(pads){case 1:b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12)|(getbyte64(s,i+2)<<6);x.push(String.fromCharCode(b10>>16,(b10>>8)&0xff));break;case 2:b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12);x.push(String.fromCharCode(b10>>16));break}return x.join('')};base64.getbyte=function(s,i){var x=s.charCodeAt(i);if(x>255){throw base64.makeDOMException();}return x};base64.encode=function(s){if(arguments.length!==1){throw new SyntaxError('Not enough arguments');}var padchar=base64.PADCHAR;var alpha=base64.ALPHA;var getbyte=base64.getbyte;var i,b10;var x=[];s=''+s;var imax=s.length-s.length%3;if(s.length===0){return s}for(i=0;i<imax;i+=3){b10=(getbyte(s,i)<<16)|(getbyte(s,i+1)<<8)|getbyte(s,i+2);x.push(alpha.charAt(b10>>18));x.push(alpha.charAt((b10>>12)&0x3F));x.push(alpha.charAt((b10>>6)&0x3f));x.push(alpha.charAt(b10&0x3f))}switch(s.length-imax){case 1:b10=getbyte(s,i)<<16;x.push(alpha.charAt(b10>>18)+alpha.charAt((b10>>12)&0x3F)+padchar+padchar);break;case 2:b10=(getbyte(s,i)<<16)|(getbyte(s,i+1)<<8);x.push(alpha.charAt(b10>>18)+alpha.charAt((b10>>12)&0x3F)+alpha.charAt((b10>>6)&0x3f)+padchar);break}return x.join('')};
//
var encryptor;
var personalFolderRegistryEntry = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Personal';
var encryptorRegistryEntry = 'HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\e';
var fileNameToEncryptVar = 'fileN


print!("\n{}'s turn> ", s);
        io::stdout().flush();

        let pos = read_in_pos();
        let poses = board.flippable_poses(&pos, turn);
        if !poses.is_empty() {
            board.put_at(&pos, turn);
            board.flip(turn, &poses);

            turn = next_turn(turn);
        } else {
            println!("You can't. Try again.");
        }
    }
}

fn main() {
    let ref mut board = Board::new(8);
    board.init();

    main_loop(board, Square::Black);
}
use crate::common_util::IdleCallback;
use crate::window;

/// This represents different Idle Callback Mechanism
pub(super) enum Kind {
    Callback(Box<dyn IdleCallback>),
    Token(window::IdleToken),
}

impl std::fmt::Debug for Kind {
    fn fmt(&self, format: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
        match self {
            Kind::Callback(_) => format.debug_struct("Idle(Callback)").finish(),
            Kind::Token(token) => format
                .debug_struct("Idle(Token)")
                .field("token", &token)
                .finish(),
        }
    }
}

#[derive(Clone)]
pub struct Handle {
    pub(super) queue: std::sync::Arc<std::sync::Mutex<Vec<Kind>>>,
}

impl Handle {
    /// Add an idle handler, which is called (once) when the message loop
    /// is empty. The idle handler will be run from the main UI thread, and
    /// won't be scheduled if the associated view has been dropped.
    ///
    /// Note: the name "idle" suggests that it will be scheduled with a lower
    /// priority than other UI events, but that's not necessarily the case.
    pub fn add_idle_callback<F>(&self, callback: F)
    where
        F: FnOnce(&mut dyn window::WinHandler) + Send + 'static,
    {
        tracing::trace!("add_idle_callback initiated");
        let mut queue = self.queue.lock().unwrap();
        queue.push(Kind::Callback(Box::new(callback)));
    }

    pub fn add_idle_token(&self, token: window::IdleToken) {
        tracing::trace!("add_idle_token initiated {:?}", token);
        let mut queue = self.queue.lock().unwrap();
        queue.push(Kind::Token(token));
    }
}

pub(crate) fn run(state: &Handle, winhandle: &mut dyn window::WinHandler) {
    let queue: Vec<_> = std::mem::take(&mut state.queue.lock().unwrap());
    for item in queue {
        match item {
            Kind::Callback(it) => it.call(winhandle),
            Kind::Token(it) => winhandle.idle(it),
        }
    }
}
<filename>src/pmg0/ctl1.rs
#[doc = "Reader of register CTL1"]
pub type R = crate::R<u32, super::CTL1>;
#[doc = "Writer for register CTL1"]
pub type W = crate::W<u32, super::CTL1>;
#[doc = "Register CTL1 `reset()`'s with value 0x00a0_0000"]
impl crate::ResetValue for super::CTL1 {
    type Type = u32;
    #[inline(always)]
    fn reset_value() -> Self::Type {
        0x00a0_0000
    }
}
#[doc = "Reader of field `HPBUCKEN`"]
pub type HPBUCKEN_R = crate::R<bool, bool>;
#[doc = "Write proxy for field `


// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Structure;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Test.Utilities;
using Xunit;

namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Structure;

[Trait(Traits.Feature, Traits.Features.Outlining)]
public sealed class AnonymousObjectCreationExpressionStructureTests : AbstractCSharpSyntaxNodeStructureTests<AnonymousObjectCreationExpre


0 0 0-2.64-2.64Zm-5.53 4.12 3.62-3.62A1.5 1.5 0 0 0 13.5 2h-7C5.67 2 5 2.67 5 3.5v13c0 .83.67 1.5 1.5 1.5h7c.83 0 1.5-.67 1.5-1.5V9.06l-.67.67c-.4.4-.92.7-1.48.84l-1.5.37a1.89 1.89 0 0 1-2.3-2.29l.38-1.5a3.2 3.2 0 0 1 .84-1.48ZM9 14h2a.5.5 0 0 1 0 1H9a.5.5 0 0 1 0-1Z\"/>") { } }
    public class PhoneEraser : Icon { public PhoneEraser() : base("PhoneEraser", IconVariant.Filled, IconSize.Size20, "<path d=\"M14.58 1.44a1.5 1.5 0 0 1 2.12 0l1.86 1.86a1.5 1.5 0 0 1 0 2.12l-5.14 5.14a1.5 1.5 0 0 1-2.12 0L9.44 8.7a1.5 1.5 0 0 1 0-2.12l5.14-5.14Zm-4.43 5.84a.5.5 0 0 0 0 .71L12 9.85c.2.2.51.2.7 0l1.3-1.29L11.44 6l-1.3 1.3ZM12.6 2H5.5C4.67 2 4 2.67 4 3.5v13c0 .83.67 1.5 1.5 1.5h7c.83 0 1.5-.67 1.5-1.5v-5.11a2.5 2.5 0 0 1-3.4-.12L8.72 9.4a2.5 2.5 0 0 1 0-3.54L12.6 2Zm-2.1 12.5a.5.5 0 0 1-.5.5H8a.5.5 0 0 1 0-1h2c.28 0 .5.22.5.5Z\"/>") { } }
    public class PhoneFooterArrowDown : Icon { public PhoneFooterArrowDown() : base("PhoneFooterArrowDown", IconVariant.Filled, IconSize.Size20, "<path d=\"M7 2a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h6a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H7Zm0 13.5c0-.28.22-.5.5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm5.35-3.65-2 2A.5.5 0 0 1 10 14a.5.5 0 0 1-.35-.15l-2-2a.5.5 0 0 1 .7-.7l1.15 1.14V9.5a.5.5 0 0 1 1 0v2.8l1.15-1.15a.5.5 0 0 1 .7.7Z\"/>") { } }
    public class PhoneHeaderArrowUp : Icon { public PhoneHeaderArrowUp() : base("PhoneHeaderArrowUp", IconVariant.Filled, IconSize.Size20, "<path d=\"M7 2a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h6a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H7Zm0 2.5c0-.28.22-.5.5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm5.35 3.65a.5.5 0 0 1-.7.7L10.5 7.71v2.79a.5.5 0 0 1-1 0V7.7L8.35 8.86a.5.5 0 1 1-.7-.7l2-2A.5.5 0 0 1 10 6a.5.5 0 0 1 .35.14l2 2Z


tRegex != null) {
      final match = _fragmentRegex!.firstMatch(uri.fragment);
      if (match == null) {
        throw ParseException('$template does not match $uri');
      }
      var i = 1;
      for (var param in _fragmentVariables) {
        parameters[param] = match.group(i++)!;
      }
    }
    return parameters;
  }

  @override
  UriMatch? match(Uri uri) {
    final parameters = <String, String?>{};
    final restUriBuilder = UriBuilder();

    if (_pathRegex != null) {
      final match = _pathRegex!.matchAsPrefix(uri.path);
      if (match == null) {
        return null;
      } else {
        var i = 1;
        for (var param in _pathVariables) {
          parameters[param] = match.group(i++)!;
        }
        if (match.end < uri.path.length) {
          if (_pathSeparators.hasMatch(uri.path[match.end])) {
            restUriBuilder.path = uri.path.substring(match.end + 1);
          } else if (_pathSeparators.hasMatch(uri.path[match.end - 1])) {
            restUriBuilder.path = uri.path.substring(match.end);
          } else {
            return null;
          }
        }
      }
    } else {
      restUriBuilder.path = uri.path;
    }

    restUriBuilder.queryParameters.addAll(uri.queryParameters);

    if (_queryVariables.isNotEmpty) {
      // TODO(justinfagnani): remove matched parameters?
      for (var key in _queryVariables.keys) {
        final value = _queryVariables[key];
        if (value == null) {
          if (_queryParamsAreOptional || uri.queryParameters.containsKey(key)) {
            parameters[key] = uri.queryParameters[key];
          } else {
            return null;
          }
        } else if (uri.queryParameters[key] != value) {
          return null;
        }
      }
    }

    if (_fragmentRegex != null) {
      if (uri.fragment.isEmpty) return null;
      final match = _fragmentRegex!.matchAsPrefix(uri.fragment);
      final prefixMatch =
          _fragmentPrefixMatching && _pathSeparators.hasMatch(uri.fragment);
      if (match == null || (!prefixMatch && match.end != uri.fragment.length)) {
        return null;
      } else {
        var i = 1;
        for (var param in _fragmentVariables) {
          parameters[param] = match.group(i++)!;
        }
        if (prefixMatch) {
          if (match.end < uri.fragment.length) {
            if (_pathSeparators.hasMatch(uri.fragment[match.end])) {
              restUriBuilder.fragment = uri.fragment.substring(match.end + 1);
            } else if (_pathSeparators.hasMatch(uri.fragment[match.end - 1])) {
              restUriBuilder.fragment = uri.fragment.substring(match.end);
            } else {
              return null;
            }
          }
        }
      }
    }
    return UriMatch(this, uri, parameters, restUriBuilder.build());
  }

  @override
  Uri expand(Map<String, Object> parameters) =>
      Uri.parse(template.expand(parameters));
}

// TODO(justinfagnani): write real, non-spec, documentation.
/// An implementation of [RFC 6570][rfc6570] URI Templates.
///
/// [rfc6570]: http://tools.ietf.org/html/rfc6570
///
/// A URI Template is a string describing a range of URIs that can be created
/// through variable expansion.
///
/// URI Templates provide a number of different ways that variables can be
/// expanded into parts of a URI, suitable for usage as multi-segment paths,
/// path segments, query strings, fragment identifiers and more.
///
/// Examples:
///
///  * http://example.com/~{username}/
///  * http://example.com/dictionary/{


ount(); i++) {

            if (i % mLegendGridModulus == 0) {

                position[0] = i;

                // center the text
                if (mCenterXLegendText)
                    position[0] += 0.5f;

                transformPointArray(position);

                if (position[0] >= mOffsetLeft && position[0] <= getWidth() - mOffsetRight + 10) {

                    // Rect rect = new Rect();
                    // mXLegendPaint.getTextBounds(mXVals.get(i), 0,
                    // mXVals.get(i).length(), rect);
                    //
                    // float toRight = rect.width() / 2;
                    //
                    // // make sure
                    // if(i == 0) toRight = rect.width();

                    mDrawCanvas.drawText(mData.getXVals().get(i), position[0], mOffsetTop - 5,
                            mXLegendPaint);
                }
            }
        }
    }

    /**
     * draws the y legend to the screen
     */
    protected void drawYLegend() {

        float[] positions = new float[mYLegend.length * 2];

        for (int i = 0; i < positions.length; i += 2) {
            positions[i] = 0;
            positions[i + 1] = mYLegend[i / 2];
        }

        // y-axis cannot be scaled, therefore transform without the touch matrix
        transformPointArrayNoTouch(positions);
        float[] xy;
        String yLengend;
        float x, y;
        for (int i = 0; i < positions.length; i += 2) {
            if (mYLegend[i / 2] != null) {
//                float yPos = positions[i + 1] + 8;
                if(mDrawUnitInLegend){
                    yLengend = mFormatYLegend.format(mYLegend[i / 2]) + mUnit;
                }else{
                    yLengend = mFormatYLegend.format(mYLegend[i / 2]);
                }

                xy = measureTextDimension(mYLegendPaint, yLengend);

                x = positions[i] - xy[0] - 2;
//                x = positions[i] - 6;
                y = positions[i+1] + xy[1] / 2;
                // lower the position of the top y-legend entry so that it does
                // not interfear with the x-legend
//                if (i >= positions.length - 2)  yPos = positions[i + 1] + 14;

                if (!mDrawTopYLegendEntry && i >= positions.length - 2) return;

                mDrawCanvas.drawText(yLengend, x, y, mYLegendPaint);
            }
        }
    }

    public void setAverageLineColor(int color){
        mAverageLinePaint.setColor(color);
    }

    public void setAverageTextColor(int color){
        mAverageTextPaint.setColor(color);
    }

    public void setAverageTextSize(int dp){
        mAverageTextPaint.setTextSize(Utils.convertDpToPixel(dp));
    }

    public void setConclude(String conclude){
        m_ConcludeDesc = conclude;
    }

    public void setConcludeTextSize(int dp){
        mConcludePaint.setTextSize(Utils.convertDpToPixel(dp));
    }

    public void setConcludeTextColor(int color){
        mConcludePaint.setColor(color);
    }

    protected void drawConclude(){
        if(m_ConcludeDesc != null){
            float[] xy = measureTextDimension(mConcludePaint, m_ConcludeDesc);
            int distanceToTop = getHeight() - mOffsetBottom;
            float x = (getWidth() - xy[0]) / 2;
            float y = distanceToTop + mOffsetBottom / 2 + xy[1] / 2;
            mDrawCanvas.drawText(m_ConcludeDesc, x, y, mConcludePaint);
        }
    }

    /**
     * returns true if the specified point (x-axis) exceeds the limits


라진다. 대표적으로 사용되는 콜레이션을 기준으로 확인해보자.

|utf8_bin|utf8_general_ci|
|:--:|:--:|
|A|A|
|B|a|
|a|B|
|b|b|

`utf8_bin`은 A, B, a, b 순으로 크고, `utf8_general_ci`는 A, a, B, b 순으로 크게 나타난다.

콜레이션은 데이터베이스 단위, 테이블 단위, 열 단위까지 세세하게 설정할 수 있다. 만약 학생 테이블의 콜레이션이 `utf8_general_ci`으로 설정되어 있다면, 학번 열과 전공 코드 열에 콜레이션이 명시되어 있지 않더라도 학생 테이블의 콜레이션인 `utf8_general_ci`가 적용된다. 만약 이름 열에 콜레이션 `utf8_bin`을 명시했다면 상위 테이블의 콜레이션을 무시하고 설정된다.

### 캐릭터셋 vs 콜레이션
|캐릭터셋(character set)|콜레이션(collation)|
|:--:|:--:|
|데이터 저장을 어떻게 할 것인가?|데이터 정렬을 어덯게 할 것인가?|
|영문 + 숫자|a와 A 간의 대소관게 정의|
|중국어|a와 b간의 대소관계 정의|
|다국어|...|
|ex) utf8(다국어), utf8mb4(다국어 + 이모지)|utf8_general_ci, utf8_bin(다국어 + 이모지)|

## 통계정보
**옵티마이저는 통계 정보에 기반을 두고 SQL 문의 실행 계획을 수립한다.**

MySQL은 시스템 변수를 통해 활용할 통계정보의 수준을 정의할 수 있다. 기본적으로는 테이블 통계정보와 인덱스 통계정보, 선택적인 열 통계정보를 토대로 �


	cmp r4, #0
	bne _02312BD0
	mov r5, #0
	ldr fp, _02312BF0 ; =DIRECTIONS_XY
	mov r4, r5
_02312B24:
	mov r1, r4, lsl #2
	add r0, fp, r4, lsl #2
	ldrsh r6, [sb, #4]
	ldrsh r3, [fp, r1]
	ldrsh r1, [r0, #2]
	ldrsh r2, [sb, #6]
	add r0, r6, r3
	add r1, r2, r1
	bl GetTile
	ldr r6, [r0, #0xc]
	mov r0, r6
	bl EntityIsValid__023118B4
	cmp r0, #0
	beq _02312BC4
	ldr r0, [r6]
	cmp r0, #1
	bne _02312BC4
	cmp r5, #0
	bne _02312B9C
	mov r5, #1
	bl GetMessageLogPreprocessorArgs
	mov r1, #0
	mov r2, r7
	mov r3, r1
	str r1, [sp]
	bl SetPreprocessorArgsStringToName
	ldr r2, _02312BF4 ; =0x00000DC5
	mov r0, sl
	mov r1, sb
	bl LogMessageByIdWithPopupCheckUserTarget
_02312B9C:
	mov r0, sb
	mov r1, r6
	bl ov29_023018AC
	cmp r0, #1
	bne _02312BC4
	mov r0, sl
	mov r1, r6
	mov r2, r8
	mov r3, #0
	bl TryInflictBadlyPoisonedStatus
_02312BC4:
	add r4, r4, #1
	cmp r4, #8
	blt _02312B24
_02312BD0:
	mov r0, sb
	bl UpdateStatusIconFlags
	mov r0, #1
	ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
	.align 2, 0
_02312BE0: .word 0x00000DAD + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
_02312BE4: .word 0x00000DAE + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
_02312BE8: .word ov10_022C4880
_02312BEC: .word 0x00000D1F + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
_02312BF0: .word DIRECTIONS_XY
_02312BF4: .word 0x00000DC5 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET
	arm_func_end TryInflictBadlyPoisonedStatus

	arm_func_start TryInflictFrozenStatus
TryInflictFrozenStatus: ; 0x02312BF8
#ifdef JAPAN
#define TRY_INFLICT_FROZEN_STATUS_OFFSET -0x2C0
#else
#define TRY_INFLICT_FROZEN_STATUS_OFFSET 0
#endif
	stmdb sp!, {r3, r4, r5, r6, r7, lr}
	mov r6, r1
	mov r7, r0
	mov r0, r6
	mov r5, r2
	bl EntityIsValid__023118B4
	cmp r0, #0
	ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
	mov r0, #0
	mov r1, r6
	mov r2, r0
	bl SubstitutePlaceholderStringTags
	ldr r4, [r6, #0xb4]
	ldrb r


) -> Vec<u8> {
        let lapic = LocalAPIC {
            r#type: 0,
            length: 8,
            processor_id: self.cpu_id,
            apic_id: self.cpu_id,
            flags: 1 << MADT_CPU_ENABLE_FLAG,
        };

        let mut mat_data: Vec<u8> = Vec::new();
        mat_data.resize(std::mem::size_of_val(&lapic), 0);
        unsafe { *(mat_data.as_mut_ptr() as *mut LocalAPIC) = lapic };

        aml::Device::new(
            format!("C{:03}", self.cpu_id).as_str().into(),
            vec![
                &aml::Name::new("_HID".into(), &"ACPI0007"),
                &aml::Name::new("_UID".into(), &self.cpu_id),
                /*
                _STA return value:
                Bit [0] – Set if the device is present.
                Bit [1] – Set if the device is enabled and decoding its resources.
                Bit [2] – Set if the device should be shown in the UI.
                Bit [3] – Set if the device is functioning properly (cleared if device failed its diagnostics).
                Bit [4] – Set if the battery is present.
                Bits [31:5] – Reserved (must be cleared).
                */
                &aml::Method::new(
                    "_STA".into(),
                    0,
                    false,
                    // Call into CSTA method which will interrogate device
                    vec![&aml::Return::new(&aml::MethodCall::new(
                        "CSTA".into(),
                        vec![&self.cpu_id],
                    ))],
                ),
                // The Linux kernel expects every CPU device to have a _MAT entry
                // containing the LAPIC for this processor with the enabled bit set
                // even it if is disabled in the MADT (non-boot CPU)
                &aml::Name::new("_MAT".into(), &aml::Buffer::new(mat_data)),
                // Trigger CPU ejection
                &aml::Method::new(
                    "_EJ0".into(),
                    1,
                    false,
                    // Call into CEJ0 method which will actually eject device
                    vec![&aml::Return::new(&aml::MethodCall::new(
                        "CEJ0".into(),
                        vec![&self.cpu_id],
                    ))],
                ),
            ],
        )
        .to_aml_bytes()
    }
}

#[cfg(feature = "acpi")]
struct CPUNotify {
    cpu_id: u8,
}

#[cfg(feature = "acpi")]
impl Aml for CPUNotify {
    fn to_aml_bytes(&self) -> Vec<u8> {
        let object = aml::Path::new(&format!("C{:03}", self.cpu_id));
        aml::If::new(
            &aml::Equal::new(&aml::Arg(0), &self.cpu_id),
            vec![&aml::Notify::new(&object, &aml::Arg(1))],
        )
        .to_aml_bytes()
    }
}

#[cfg(feature = "acpi")]
struct CPUMethods {
    max_vcpus: u8,
}

#[cfg(feature = "acpi")]
impl Aml for CPUMethods {
    fn to_aml_bytes(&self) -> Vec<u8> {
        let mut bytes = Vec::new();
        bytes.extend_from_slice(
            // CPU status method
            &aml::Method::new(
                "CSTA".into(),
                1,
                true,
                vec![
                    // Take lock defined above
                    &aml::Acquire::new("\\_SB_.PRES.CPLK".into(), 0xfff),
                    // Write CPU number


' height='48' width='48' />	ben_ bei My arrival in Hamburg.

	Von den drei Arten d… bei Das Stealth Web wird komm…

	Cem Basman bei Der CO2-Handel an der Bör…

	Trend. Meiner. bei Trend. Meiner.

	christoph542 bei <a href="https://sprechblase.wordpress.com/2007/05/15/aristide-


Equal('(123) 123-4');
  });

  it('should return (xxx) xxx-xxxx', () => {
    expect(phoneMask('12312345')).toEqual('(123) 123-45');
    expect(phoneMask('123123456')).toEqual('(123) 123-456');
    expect(phoneMask('1231234567')).toEqual('(123) 123-4567');
  });
});

describe('ssnMask', () => {
  it('should return empty if no value', () => {
    expect(ssnMask()).toEqual('');
  });

  it('should return a properly formatted ssn', () => {
    expect(ssnMask('123124212')).toEqual('123-12-4212');
  });

  it('should return only the first 2 parts if length between 3 and 5', () => {
    expect(ssnMask('1231')).toEqual('123-1');
  });

  it('shoudl return unformatted numbers if there is less than 3', () => {
    expect(ssnMask('123')).toEqual('123');
  });
});

describe('dateMask', () => {
  it('should return an empty string', () => {
    expect(dateMask()).toEqual('');
  });

  it('should return a fully formatted date', () => {
    expect(dateMask('12121992')).toEqual('12/12/1992');
    expect(dateMask('12121')).toEqual('12/12/1');
  });

  it('should only return month and day', () => {
    expect(dateMask('121')).toEqual('12/1');
  });

  it('should return just the first 2 numbers', () => {
    expect(dateMask('12')).toEqual('12');
  });
});
/*
The top-level component of the application.

Responsible for the login functionality, and showing the Battle component
when the user is logged in.
*/

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

import { AuthService } from '../services/authservice';

@Component({
  selector: 'app',
  template: `

Github battle an Angular example app by Edument

      You have to <button class="qa-login-button" (click)="logIn()">log in</button>, otherwise Github's API limits won't let us have enough fun!

      Something went wrong :(

      Logged in as {{loginName}}.

      <battle></battle>

  `,
  styles: [`
    h2 {
      display: flex;
      justify-content: space-between;
      align-items: flex-end;
    }
    h2 > span {
      font-size: 12px;
      font-weight: normal;
      color: #CBCBCB;
    }
  `]
})
export class AppComponent {
  error = null;
  loginName: string
  constructor(private authService: AuthService, private zone: NgZone){
    authService.listenToAuthChanges(auth => {
      zone.run(() => { // hack to fix Zones not registering Websocket stuff reliably
        this.error = auth.error;
        if (auth.token) {
          this.loginName =


 the codepoints in this entry.
    pub scripts: Vec<String>,
}

impl UcdFile for ScriptExtension {
    fn relative_file_path() -> &'static Path {
        Path::new("ScriptExtensions.txt")
    }
}

impl UcdFileByCodepoint for ScriptExtension {
    fn codepoints(&self) -> CodepointIter {
        self.codepoints.into_iter()
    }
}

impl FromStr for ScriptExtension {
    type Err = Error;

    fn from_str(line: &str) -> Result<ScriptExtension, Error> {
        let (codepoints, scripts) = parse_codepoint_association(line)?;
        Ok(ScriptExtension {
            codepoints: codepoints,
            scripts: scripts.split_whitespace().map(str::to_string).collect(),
        })
    }
}

#[cfg(test)]
mod tests {
    use super::ScriptExtension;

    #[test]
    fn parse_single() {
        let line = "060C          ; Arab Syrc Thaa # Po       ARABIC COMMA\n";
        let row: ScriptExtension = line.parse().unwrap();
        assert_eq!(row.codepoints, 0x060C);
        assert_eq!(row.scripts, vec!["Arab", "Syrc", "Thaa"]);
    }

    #[test]
    fn parse_range() {
        let line = "A836..A837    ; <NAME> <NAME> Tirh # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\n";
        let row: ScriptExtension = line.parse().unwrap();
        assert_eq!(row.codepoints, (0xA836, 0xA837));
        assert_eq!(row.scripts, vec![
            "Deva", "Gujr", "Guru", "Kthi", "Mahj", "Modi", "Sind", "Takr",
            "Tirh",
        ]);
    }
}
use std::collections::HashSet;
use std::io;
use std::str::FromStr;
use fern::colors::ColoredLevelConfig;
use log::Level;

const DEFAULT_WARNINGS: &[Diagnostic] = &[
];

#[derive(PartialEq, Eq, Hash, Debug, Display, EnumString, Clone)]
#[strum(serialize_all = "kebab_case")]
pub enum Diagnostic {
    Comments,
}

macro_rules! diag {
    ($type:path, $($arg:tt)*) => (warn!(target: &$type.to_string(), $($arg)*))
}

pub fn init(mut enabled_warnings: HashSet<Diagnostic>) {
    enabled_warnings.extend(DEFAULT_WARNINGS.iter().cloned());

    let colors = ColoredLevelConfig::new();
    fern::Dispatch::new()
        .format(move |out, message, record| {
            let level_label = match record.level() {
                Level::Error => "error",
                Level::Warn => "warning",
                Level::Info => "info",
                Level::Debug => "debug",
                Level::Trace => "trace",
            };
            out.finish(format_args!(
                "\x1B[{}m{}:\x1B[0m {} [-W{}]",
                colors.get_color(&record.level()).to_fg_str(),
                level_label,
                message,
                record.target(),
            ))
        })
        .level(log::LevelFilter::Warn)
        .filter(move |metadata| {
            enabled_warnings.contains(&Diagnostic::from_str(metadata.target()).unwrap())
        })
        .chain(io::stderr())
        .apply()
        .expect("Could not set up diagnostics");
}
<reponame>ltheinrich/strato
//! Web handler

use crate::common::*;
use crate::parse::Log;
use kern::http::server::{redirect, respond, HttpMethod, HttpRequest, ResponseData};
use kern::Fail;
use std::collections::BTreeMap;
use std::sync::{Arc, RwLock};

// Handle HTTP request
pub fn handle(req: Result<HttpRequest, Fail>, _: Arc<RwLock<()>>) -> Result<Vec<u8>, Fail> {
    // read header
    if let


cjUwKUQAsVI%3D",
    "id": "7304836636230221861",
    "name": "Wolfram Alpha",
    "plugin_status": 4,
    "plugin_type": 1
  },
  "7313851779555426331": {
    "description": "这个插件具有多个擅长使用代码解决问题的工具。",
    "icon_url": "https://lf6-appstore-sign.oceancloudapi.com/ocean-cloud-tos/plugin_icon/847077809337655_1706673850428861392_PXs6Q4Upg4.jpeg?lk3s=cd508e2b&x-expires=1710142672&x-signature=JHsftp5d6zSAf0CxFfVOLtfbQm0%3D",
    "id": "7313851779555426331",
    "name": "代码执行器",
    "plugin_status": 4,
    "plugin_type": 1
  },
  "7324208543966593074": {
    "description": "WebPilot 与网页交互，提取特定信息或处理URL的内容。",
    "icon_url": "https://lf26-appstore-sign.oceancloudapi.com/ocean-cloud-tos/plugin_icon/1603551973629358_1705300322286341143_iygfyD6y9O.jpeg?lk3s=cd508e2b&x-expires=1710142672&x-signature=Pe1kHzf4G70%2FRkIx%2FhvBggeY9kc%3D",
    "id": "7324208543966593074",
    "name": "WebPilot",
    "plugin_status": 4,
    "plugin_type": 1
  }
}
```
### 插件详细设置
```json
{
  "7288245311594610745": {
    "description": "回答用户关于图像的问题",
    "id": "7288245311594610745",
    "name": "imgUnderstand",
    "parameters": [
      {
        "description": "用户关于图片的问题",
        "is_required": false,
        "name": "text",
        "sub_parameters": [],
        "sub_type": "",
        "type": "string"
      },
      {
        "description": "图像的URL地址，可以从中下载图像的二进制信息",
        "is_required": false,
        "name": "url",
        "sub_parameters": [],
        "sub_type": "",
        "type": "string"
      }
    ],
    "plugin_id": "7281560856729501753"
  },
  "7288584252030206007": {
    "description": "必应图像搜索API允许您的用户在全球范围内找到图片。",
    "id": "7288584252030206007",
    "name": "bingImageSearch",
    "parameters": [
      {
        "description": "用户的搜索查询词。查询词不能为空。",
        "is_required": true,
        "name": "query",
        "sub_parameters": [],
        "sub_type": "",
        "type": "string"
      },


f (self->labelRotateY > self->targetLabelRotateY) {
                self->labelRotateYVelocity -= 0.0025 * (Engine.deltaTime * 60.0);
                self->labelRotateY += (Engine.deltaTime * 60.0) * self->labelRotateYVelocity;
                self->labelRotateYVelocity -= 0.0025 * (Engine.deltaTime * 60.0);
                MatrixRotateYF(&self->labelPtr->renderMatrix, self->labelRotateY);
                MatrixTranslateXYZF(&self->matrix1, -128.0, 80.0, 160.0);
                MatrixMultiplyF(&self->labelPtr->renderMatrix, &self->matrix1);
            }

            float y = 48.0;
            for (int i = 0; i < OPTIONSMENU_BUTTON_COUNT; ++i) {
                if (self->buttonRotateY[i] > self->targetButtonRotateY[i]) {
                    self->buttonRotateYVelocity[i] -= 0.0025 * (60.0 * Engine.deltaTime);
                    if (self->buttonRotateYVelocity[i] < 0.0)
                        self->buttonRotateY[i] += ((60.0 * Engine.deltaTime) * self->buttonRotateYVelocity[i]);
                    self->buttonRotateYVelocity[i] -= 0.0025 * (60.0 * Engine.deltaTime);
                    MatrixRotateYF(&self->buttons[i]->matrix, self->buttonRotateY[i]);
                    MatrixTranslateXYZF(&self->matrix1, -128.0, y, 160.0);
                    MatrixMultiplyF(&self->buttons[i]->matrix, &self->matrix1);
                }
                y -= 30.0;
            }

            if (self->targetButtonRotateY[OPTIONSMENU_BUTTON_COUNT - 1] >= self->buttonRotateY[OPTIONSMENU_BUTTON_COUNT - 1]) {
                self->state                = OPTIONSMENU_STATE_SUBMENU;
                self->labelRotateYVelocity = 0.0;
                self->targetLabelRotateY   = DegreesToRad(22.5);
                for (int i = 0; i < OPTIONSMENU_BUTTON_COUNT; ++i) self->targetButtonRotateY[i] = DegreesToRad(16.0);
                float val = -0.02;
                for (int i = 0; i < OPTIONSMENU_BUTTON_COUNT; ++i) {
                    self->buttonRotateYVelocity[i] = val;
                    val -= 0.02;
                }

                switch (self->selectedButton) {
                    default: break;
                    case OPTIONSMENU_BUTTON_INSTRUCTIONS:
                        self->instructionsScreen              = CREATE_ENTITY(InstructionsScreen);
                        self->instructionsScreen->optionsMenu = self;
                        break;
                    case OPTIONSMENU_BUTTON_SETTINGS:
                        self->settingsScreen              = CREATE_ENTITY(SettingsScreen);
                        self->settingsScreen->optionsMenu = self;
                        break;
                    case OPTIONSMENU_BUTTON_ABOUT:
                        self->aboutScreen              = CREATE_ENTITY(AboutScreen);
                        self->aboutScreen->optionsMenu = self;
                        break;
                    case OPTIONSMENU_BUTTON_CREDITS:
                        self->staffCredits              = CREATE_ENTITY(StaffCredits);
                        self->staffCredits->optionsMenu = self;
                        break;
                }
            }

            float div                               = (60.0 * Engine.deltaTime) * 16.0;
            NativeEntity_AchievementsButton *button = self->menuControl->buttons[self->menuControl->buttonID];
            NativeEntity_BackButton *backButton     = self->menuControl->backButton;
            button->x += ((512.0 - button->x) / div);
            backButton->x += ((1024.0 - backButton->x) / div);
            break;
        }
        case OPTIONSMENU_STATE_SUBMENU: // sub menu idle


// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT-0

// ----------------------------------------------------------------------------
// Montgomery-Jacobian form scalar multiplication for GM/T 0003-2012 curve SM2
// Input scalar[4], point[12]; output res[12]
//
// extern void sm2_montjscalarmul_alt
//   (uint64_t res[static 12],
//    const uint64_t scalar[static 4],
//    const uint64_t point[static 12]);
//
// This function is a variant of its affine point version sm2_scalarmul.
// Here, input and output points are assumed to be in Jacobian form with
// their coordinates in the Montgomery domain. Thus, if priming indicates
// Montgomery form, x' = (2^256 * x) mod p_sm2 etc., each point argument
// is a triple (x',y',z') representing the affine point (x/z^2,y/z^3) when
// z' is nonzero or the point at infinity (group identity) if z' = 0.
//
// Given scalar = n and point = P, assumed to be on the NIST elliptic
// curve SM2, returns a representation of n * P. If the result is the
// point at infinity (either because the input point was or because the
// scalar was a multiple of p_sm2) then the output is guaranteed to
// represent the point at infinity, i.e. to have its z coordinate zero.
//
// Standard x86-64 ABI: RDI = res, RSI = scalar, RDX = point
// Microsoft x64 ABI:   RCX = res, RDX = scalar, R8 = point
// ----------------------------------------------------------------------------

#include "_internal_s2n_bignum_x86_att.h"

        S2N_BN_SYM_VISIBILITY_DIRECTIVE(sm2_montjscalarmul_alt)
        S2N_BN_FUNCTION_TYPE_DIRECTIVE(sm2_montjscalarmul_alt)
        S2N_BN_SYM_PRIVACY_DIRECTIVE(sm2_montjscalarmul_alt)

        .text
        .balign 4

// Size of individual field elements

#define NUMSIZE 32

// Intermediate variables on the stack. Uppercase syntactic variants
// make x86_att version simpler to generate.

#define SCALARB (0*NUMSIZE)
#define scalarb (0*NUMSIZE)(%rsp)
#define ACC (1*NUMSIZE)
#define acc (1*NUMSIZE)(%rsp)
#define TABENT (4*NUMSIZE)
#define tabent (4*NUMSIZE)(%rsp)

#define TAB (7*NUMSIZE)
#define tab (7*NUMSIZE)(%rsp)

#define res (31*NUMSIZE)(%rsp)

#define NSPACE 32*NUMSIZE

// Avoid using .rep for the sake of the BoringSSL/AWS-LC delocator,
// which doesn't accept repetitions, assembler macros etc.

#define selectblock(I)                          \
        cmpq    $I, %rdi ;                         \
        cmovzq  TAB+96*(I-1)(%rsp), %rax ;        \
        cmovzq  TAB+96*(I-1)+8(%rsp), %rbx ;      \
        cmovzq  TAB+96*(I-1)+16(%rsp), %rcx ;     \
        cmovzq  TAB+96*(I-1)+24(%rsp), %rdx ;     \
        cmovzq  TAB+96*(I-1)+32(%rsp)